基于logback的自定义工具包(肥肠实用)
Posted 一个懒惰的程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于logback的自定义工具包(肥肠实用)相关的知识,希望对你有一定的参考价值。
缘由:最近在项目开发中各模块中经常需要使用到业务日志的打印备份回滚等,以备之后做日志分析等,项目框架使用的是springboot,基于springboot的核心思想约定大于配置,甚是感觉项目中一些logback.xml配置之繁琐,如果你也有同样的烦恼,请看如下介绍
注:本工具类是封装在Logback的基础之上,所以在使用的时候项目必须有对应的logback依赖,并对logback之使用和原理有一定理解,如果未使用过logback建议先看如下几篇文章:
1,配置参数说明
loggerName 日志名称/对应业务主题名称
basePath 日志存放跟路径 可以是相对路径 如当前项目目录的logs目录下 则配置为:/logs
backPath 日志备份回滚目录
fileName 日志文件名称
fileNamePattern 日志文件回滚条件格式Pattern
maxFileSize 日志文件最大大小 默认大小2MB
maxHistory 历史日志保留最长时间 默认30天
totalSizeCap 日志存储总大小限制 如: maxHistory 配置为30 totalSizeCap配置为3G 意思就是最多保持30天的历史日志数据 如果30天内的数据大于3GB将会按时间清除老日志文件
layout 自定义日志格式化layout 默认的为SimpleEncoderLayout
enablePatternLayout 是否启用PatternLayoutEncoder 默认是false
enableConsoleAppender 是否开启控制台打印 默认false
enableFileAppender 是否开启文件打印 默认true
encoderPattern PatternLayoutEncoder日志格式化对应的Pattern
2,使用说明
新建测试类如下:
1public class LogTest {
2
3 /**
4 * 自定义的Logger使用方式
5 */
6 private static final Logger logger = (Logger) ZhiliaoLogFactory.getLogger(LogTest.class).build();
7 /**
8 * 默认的Logger使用方式
9 */
10// private static final Logger logger = LoggerFactory.getLogger(LogTest.class);
11
12 public static void main(String[] args) {
13 for(int i=0;i<1000;i++){
14 logger.info("测试"+i);
15 }
16 }
17}
运行将会在项目根目录下生成一个logs的文件夹下边就会产生一个zhiliao_log.log文件,怎样是不是超级简单跟原先logback的使用是不是几乎没区别
3,性能说明
大家可能会有一个疑问既然使用这么简单,那性能如何呢?光是简单也没用必须不能对性能有影响才好,那接下来让我们来做一个测试如下:
1public class LogTest {
2
3 /**
4 * 自定义的Logger使用方式
5 */
6 private static final Logger logger = (Logger) ZhiliaoLogFactory.getLogger(LogTest.class)
7 .enableConsoleAppender()
8 .disableFileAppender()
9 .enablePatternLayout()
10 .build();
11 /**
12 * 默认的Logger使用方式
13 */
14// private static final Logger logger = LoggerFactory.getLogger(LogTest.class);
15
16 public static void main(String[] args) {
17 Long starttime = System.currentTimeMillis();
18 for(int i=0;i<10000;i++){
19 logger.info("测试"+i);
20 }
21 Long endtime = System.currentTimeMillis();
22 System.out.println("执行时间:"+(endtime-starttime));
23 }
24}
使用自定义的Logger方式运行三次时间分别是:440,347,298 平均时间为:361.66
使用默认的Logger方式运行三次时间分别是:367,352,455 平均时间为:391.33
从以上结果我们可以发现自定义的方式平均时间反而比默认时间还要短一些,从原理分析来上以上两种用法性能其实是没有任何区别, 但是如果你的业务上仅仅只是想打印简单的message信息,那么可以使用自定义的打印将会有比较大的性能提升如下:
把Logger改成如下:
1public class LogTest {
2
3 /**
4 * 自定义的Logger使用方式
5 */
6 private static final Logger logger = (Logger) ZhiliaoLogFactory.getLogger(LogTest.class)
7 .build();
8 /**
9 * 默认的Logger使用方式
10 */
11// private static final Logger logger = LoggerFactory.getLogger(LogTest.class);
12
13 public static void main(String[] args) {
14 Long starttime = System.currentTimeMillis();
15 for(int i=0;i<10000;i++){
16 logger.info("测试"+i);
17 }
18 Long endtime = System.currentTimeMillis();
19 System.out.println("执行时间:"+(endtime-starttime));
20 }
21}
再运行你会发现性能会有比较明显的提升,平均大概都在100多毫秒,为什么性能会比较大的提升,简单来讲就是省去了很多不需要的日志格式化打印
4,springboot中如何使用该工具类
1<repositories>
2 <repository>
3 <id>public</id>
4 <name>Team Maven Repository</name>
5 <url>http://111.231.119.223:8081/nexus/content/repositories/releases/</url>
6 <releases>
7 <enabled>true</enabled>
8 </releases>
9 <snapshots>
10 <enabled>true</enabled>
11 </snapshots>
12 </repository>
13</repositories>
14
15<dependency>
16 <groupId>com.zhiliao</groupId>
17 <artifactId>zhiliao-logback-util</artifactId>
18 <version>1.0.0</version>
19</dependency>
这样就可以直接在项目中按如下方式使用了
private static final Logger logger = (Logger) ZhiliaoLogFactory.getLogger(LogTest.class)
.enableConsoleAppender() // 这些配置规矩项目需要使用
.disableFileAppender()
.enablePatternLayout()
.build();
源码可以查看:
https://github.com/zhiliao666/java-log/tree/master/zhiliao-logback-util
以上是今天文章的所有内容,欢迎大家吐槽
以上是关于基于logback的自定义工具包(肥肠实用)的主要内容,如果未能解决你的问题,请参考以下文章
logback教程logback快速入门超实用详细教程收藏这一篇就够了(万字长文)
微软 GitHub 推出新代码搜索工具,面向GitHub编程?