说明:Logback是由log4j创始人设计的另一个开源日志组件,拥有更优越的性能,Springboot默认的集成日志,它有一个核心模块logback-core和两个基本模块logback-classic、logback-access更多可以上官方网站:http://logback.qos.ch了解一下,这些暂不是我们的重点。
本节的主要介绍:1、了解logback.xml的常用配置 2、自定义自己的日志输出节点 3、了解常用的属性(可参考配置中注释)。
1、工程描述
说明:日志测试比较简单,引入一个logback.xml文件,如果logback.xml位置比较特殊可以在application.propertis中指定引入,另外一个对外测试接口Log.java。
2、代码步骤
第一:定义logback.xml(太长,只显示error节点和自定义的节点),我在error节点中写了很详细的注释,感觉这样比拿出来说明更易理解 。
<configuration>
<!-- 输出到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 输出格式 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -
%msg%n</pattern>
</encoder>
</appender>
<!-- error级别单独记录 -->
<appender name="errorAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/test-error-today.log</file>
<!-- 以day为单位自动回滚 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily -->
<fileNamePattern>logs/test-error/test-error-%d{yyyy-MM-dd}.%i.log.gz
</fileNamePattern>
<!-- 日志最大的历史30天 删除策略https://www.jianshu.com/p/d9c08785430a-->
<maxHistory>30</maxHistory>
<!-- 日志文件最大的大小,若当天日志达到最大maxFileSixe时,%i会自动加1 -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 日志输出格式:%d表示日期时间,%thread表示线程名,%-5level:级别从左显示5个字符宽度
%logger{35} 表示logger名字最长35个字符,否则按照句点分割。 %msg:日志消息,%n是换行符
-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread]
%-5level%logger{35} - %msg%n</pattern><!-- https://blog.csdn.net/sinat_25076521/article/details/80513543 -->
</encoder>
<!-- error级别过滤器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 只显示ERROR级别 -->
<level>ERROR</level>
<!--匹配到就允许-->
<onMatch>ACCEPT</onMatch>
<!--没匹配到就禁止-->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<property name="log.path" value="logs/captcha-info" />
<property name="serverNode" value="node236" />
<!-- collect info级别单独记录 -->
<appender name="logCollect"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/test-collect-today.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.path}/collect.%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>5kb</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%msg%n</pattern><!-- 日志格式使用类似csv的格式,所以不要其他信息了 -->
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 自定义异步-->
<appender name="async" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<appender-ref ref="logCollect" />
</appender>
<!-- additivity为false表示只在自已定义的级别输出,不会继承root(否则也会在root里输出,输出两次) -->
<logger name="logCollect" additivity="false" level="INFO"><!-- INFO级别 -->
<appender-ref ref="async"></appender-ref>
</logger>
<!-- 根,所有logger的祖先 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="errorAppender" />
<appender-ref ref="warnAppender" />
<appender-ref ref="infoAppender" />
</root>
</configuration>
第二:application.properties中引入logback.xml,初始级别为INFO,默认级别为DEBUG。
logging.config: file:./logback.xml
logging.level.JaninoLogger: INFO
第三:对外提供的接口代码。
@RestController
public class Log {
Logger logger = LoggerFactory.getLogger("logCollect");
Logger log = LoggerFactory.getLogger(this.getClass());
@RequestMapping("/log")
public String logTest1() {
for (int i = 0; i < 10000; i++) {
logger.info("参数{},参数{},参数{},参数{},参数{},参数{},参数{}", i, i + 1, i + 2, i + 3, i + 4, i + 5, i + 6);
}
return "hello log";
}
@RequestMapping("/log1")
public String logTest2() {
for (int i = 0; i < 10000; i++) {
log.info("参数{},参数{},参数{},参数{},参数{},参数{},参数{}", i, i + 1, i + 2, i + 3, i + 4, i + 5, i + 6);
log.warn("参数{},参数{},参数{},参数{},参数{},参数{},参数{}", i, i + 1, i + 2, i + 3, i + 4, i + 5, i + 6);
log.error("参数{},参数{},参数{},参数{},参数{},参数{},参数{}", i, i + 1, i + 2, i + 3, i + 4, i + 5, i + 6);
}
return "hello log1";
}
}
3、自定义节点解析
在logback.xml中logCollect为自定义节点,大多数属性说明可以参考上面error节点注释,这里几个上面没有出现的说明一下。
property:定义属性变量,可以在下面直接引用 ;
pattern:%msg%n表示只输出内容CVS格式内容,不定义头,方便解析 ;
filter:只定义了INFO级别,说明logCollect节点只能用到INFO上;
additivity="false":表示不从root根上继承,只输出自定义的INFO级别,否则会被输出两次 ;
4、测试说明

可以看出图中自定义的日志进行了切分,而且输出内容只是简单的逗号分隔,cvs可以直接打开,其它日志可以自行运行代码打开查看(会有定义的头信息)。
5、打包下载
链接:https://pan.baidu.com/s/1Yr8pXlkpqzkzqioMj7onSg
提取码:upl3
若链接莫名失效,可以留言联系,也可以按照上述的方式自行配置。

网友评论