原文作者:IT-CRUD
原文地址:http://blog.itcrud.com/blogs/2018/12/logback-first
转载声明:转载请注明原文地址,注意版权维护,谢谢!
logback日志必备。平时在新建项目的时候都是Ctrl+C
和Ctrl+V
,完全不要自己做什么,不管使用Springmvc还是Springboot都不需要配置logback.xml
文件的位置,直接将logback.xml
放到resources目录下,命令符合要求即可。但是真正懂或者了解logback里面的各项配置的却少之又少。现在工作闲暇时间看了一下官方的文档,然后自己操作一下,算是入门,不再像之前那么懵比。
appender
,是用来定义一个写日志记录的组件,常用的appender类有ConsoleAppender
和RollingFileAppender
,前者个是用来在控制台上打印日志,后者是将日志输出到文件中。layout
,是指定日志的布局方式,这个基本都不会去特殊的指定,可以忽略,知道有这个东西即可。encoder
,负责把事件转换成字节数组并把字节数组写到合适的输出流。encoder
可以指定属性值class
,这里对应的类只有一个PatternLayoutEncoder
,也是默认值,可以不去指定。filter
,过滤器分为三种,logback-classic提供的是两种,分别是常规的过滤器和Turbo过滤器。常用的过滤器就是按照日志级别来控制,将不同级别的日志输出到不同文件中,便于查看日志。如:错误日志输出到xxx-error.log
,info日志输出到xxx-info.log
中。rollingPolicy
,用来设置日志的滚动策略,当达到条件后会自动将条件前的日志生成一个备份日志文件,条件后的日志输出到最新的日志文件中。常用的是按照时间来滚动(使用的类TimeBaseRollingPolicy
),还有一种就是基于索引来实现(使用的类FixedWindowRollingPolicy
)。triggeringPolicy
,日志触发器策略,常用的是日志的大小的控制,当日志达到对应的大小的时候,就会触发。生成新的日志文件。日志大小的控制配合rollingPlicy
使用的时候,不同的rollingPolicy
会有所不同。上面就是常用的几个组成部分,下面来各个说明一下。
定义日志组件:(具体结束看代码注释)
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>【logbck】%blue([requestId:%X{requestId:-syslogId}]) %d{yyyy-MM-dd HH:mm:ss.SSS} %red([%thread]) %5level - %msg%npattern>
encoder>
appender>
rollingPolicy
对应是时间滚动策略的日志文件定义:
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/logback/log/test.logfile>
<encoder>
<pattern>【logbck】%blue([requestId:%X{requestId:-syslogId}]) %d{yyyy-MM-dd HH:mm:ss.SSS} %red([%thread]) %5level - %msg%npattern>
encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/logback/log/test-%d{yyyy-MM-dd}.logfileNamePattern>
<maxHistory>30maxHistory>
rollingPolicy>
appender>
说明:fileNamePattern
是要格外说明的。如上我设置按天来滚动,前一天日志打印到23点59分,然后就一直没有请求日志,直到次日的1点才有新的日志进入。在0点到1点这个时间段,日志文件是不会滚动生成新的日志文件。因为滚动的动作是需要日志写入动作来触发。
上面是根据时间滚动,下面看一下根据索引滚动。
rollingPolicy
对应是索引滚动策略的日志文件定义:
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/logback/log/test-%i.logfileNamePattern>
<minIndex>1minIndex>
<maxIndex>3maxIndex>
rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>1MBmaxFileSize>
triggeringPolicy>
说明:
maxIndex
不可设置为过大,过大后会自动被置为默认值12,这个过大的值具体是多少没测试过(欢迎小伙伴测试后在文末回复一下,就偷个懒了)。triggeringPolicy
作为触发机制。rollingPolicy
对应的是时间策略并配合文件大小触发器来实现日志文件定义:
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/logback/log/test-%d{yyyy-MM-dd}-%i.logfileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>1MBmaxFileSize>
timeBasedFileNamingAndTriggeringPolicy>
rollingPolicy>
说明:按照时间滚动的单位是天,按照文件大小的滚动是1M,当今天产生的日志大小是5M,就会生成5个日志文件,每个文件对应的大小是1M,对应生成日期是一天,对应的编号不同,也就是%i
占位符替换后的编号(从0开始)。
过滤器,根据日志类型将日志输出到不同的日志文件中。文件定义如下:
<appender name="info-log" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/logback/log/test-info.logfile>
<encoder>
<pattern>【logbck】%blue([requestId:%X{requestId:-syslogId}]) %d{yyyy-MM-dd HH:mm:ss.SSS} %red([%thread]) %5level - %msg%npattern>
encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFOlevel>
<onMatch>ACCEPTonMatch>
<onMismatch>DENYonMismatch>
filter>
appender>
<appender name="info-error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/logback/log/test-error.logfile>
<encoder>
<pattern>【logbck】%blue([requestId:%X{requestId:-syslogId}]) %d{yyyy-MM-dd HH:mm:ss.SSS} %red([%thread]) %5level - %msg%npattern>
encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERRORlevel>
<onMatch>ACCEPTonMatch>
<onMismatch>DENYonMismatch>
filter>
appender>
不同appender对应不同的日志组件,常规操作,不多说。
其实logback里面的东西还有很多,这里只说基本的操作,在日常开发中很实用的内容。至于源码什么的解析了没什么意思。遇到logback报错能够解决,遇到logback配置报错能够解决,在没有logback模板的情况下,可以徒手写一波就OK啦。
这篇文章说的是主要核心元素,接下来还会写一篇文章,写一下MDC的使用和其他酷炫的操作。
官方中文档(虽然有错别字,但是看着还是没有问题滴):logback官方中文版文档.pdf
完整配置logback.xml文件:logback.xml
logback新认识(二):logback之MDC日志跟踪、日志自定义效果