logback⽇志详细解析
1、为什么使⽤logback
内核重写、测试充分、初始化内存加载更⼩,这⼀切让logback性能和log4j相⽐有诸多倍的提升
logback⾮常⾃然地直接实现了slf4j,⽅便理解
⽀持⾃动去除旧的⽇志⽂件,可以控制已经产⽣⽇志⽂件的最⼤数量
官⽅⾃动配置了许多的appender,⽅便使⽤
2、springboot中为什么使⽤l来代替l
3、属性log4j2过滤日志
(1)configuration
configuration是logback的⽗节点,它只有三个属性:
scan
⾃动加载判断,当配置⽂件发⽣改变时,将会被重新加载。默认为true
scanPeriod
检测配置⽂件是否有修改的时间间隔,如果没有给出时间单位,默认为毫秒,当scan=true时这个值⽣效,默认时间间隔为1分钟
debug
当被设置为true时,将打印出logback内部⽇志信息,实时查看logback运⾏信息,默认为false
(2)logger
<logger>⽤来设置某⼀个包或者某⼀个具体类的⽇志打印级别以及⽅式。在logger内可以包含零个或者多个appender-ref,然后对应的appender将会被添加到这个logger。它的属性有:
name
指定对应的包路径或者类路径。
level
⽤来设置⽇志打印的级别,五个常⽤打印级别从低⾄⾼依次为TRACE、DEBUG、INFO、WARN、ERROR,如果未设置此级别,那么当前logger会继承上级的级别
additivity
是否向上级log传递打印信息,默认为true
(3)root
<root>也是logger元素,但它是根logger,所有logger的最上级,只有⼀个level属性,它的name固定为ROOT
(4)appender
<appender>是configuration的⼦节点,它的作⽤是定义⽇志输出的⽅式。它有2个必要的属性:
name:指定当前appender的名称
class:指定appender对应的类,控制⽇志输出⽅式
(5)encoder
encoder主要负责的是将⽇志信息转换成字节数组以及将字节数组写到输出流中去。encoder
转换符作⽤
输出⽇志的logger名,可有⼀个整形参数,功能是缩短logger名,设置为0表⽰只输⼊logger最右
边点符号之后的字符串。
c {length } lo {length } logger {length } Conversion specifier Logger name Result
%logger mainPackage.sub.sample.Bar mainPackage.sub.sample.Bar %logger{0}mainPackage.sub.sample.Bar Bar
%logger{5}mainPackage.sub.sample.Bar m.s.s.Bar
%logger{10}mainPackage.sub.sample.Bar m.s.s.Bar
%logger{15}mainPackage.sub.sample.Bar m.s.sample.Bar
%logger{16}mainPackage.sub.sample.Bar m.sub.sample.Bar
%logger{26}mainPackage.sub.sample.Bar mainPackage.sub.sample.Bar
C {length } class {length } 输出执⾏记录请求的调⽤者的全限定名。参数与上⾯的⼀样。尽量避免使⽤,除⾮执⾏速度不造成任何问题。
contextName
cn 输出上下⽂名称。
d {pattern } dat
e {pattern } 输出⽇志的打印⽇志,模式语法与SimpleDateFormat兼容。
Conversion Pattern Result
%d2006-10-20 14:06:49,812 %date2006-10-20 14:06:49,812 %date{ISO8601}2006-10-20 14:06:49,812 %date{HH:mm:ss.SSS}14:06:49.812
%date{dd MMM yyyy ;HH:mm:ss.SSS}20 oct. 2006;14:06:49.812
F / file输出执⾏记录请求的java源⽂件名。尽量避免使⽤,除⾮执⾏速度不造成任何问题。
caller{depth}caller{depth, evaluator-1, ...
evaluator-n}输出⽣成⽇志的调⽤者的位置信息,整数选项表⽰输出信息深度。
例如, %caller{2} 输出为:
0 [main] DEBUG - logging statement
Caller+0 at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22) Caller+1 at mainPackage.sub.ateLoggingRequest(Bar.java:17)例如, %caller{3} 输出为:
16 [main] DEBUG - logging statement
Caller+0 at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22) Caller+1 at mainPackage.sub.ateLoggingRequest(Bar.java:17) Caller+2 at mainPackage.ConfigTester.main(ConfigTester.java:38)
L / line输出执⾏⽇志请求的⾏号。尽量避免使⽤,除⾮执⾏速度不造成任何问题。m / msg / message输出应⽤程序提供的信息。
M / method输出执⾏⽇志请求的⽅法名。尽量避免使⽤,除⾮执⾏速度不造成任何问题。
n输出平台先关的分⾏符“\n”或者“\r\n”。
p / le / level输出⽇志级别。
r / relative输出从程序启动到创建⽇志记录的时间,单位是毫秒
t / thread输出产⽣⽇志的线程名。
replace(p ){r, t}p 为⽇志内容,r 是正则表达式,将p 中符合r 的内容替换为t 。例如, "%replace(%msg){‘\s‘, ‘‘}"
(6)filter
<filter>是appender的⼦节点,表⽰对当前给定的⽇志级别再进⾏⼀次过滤。配置⽅式:
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误⽇志 -->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
4、常⽤Appender说明
(1)ConsoleAppender
作⽤是将⽇志输出到控制台。配置⽅式为:
<appender name="console" class="ch.ConsoleAppender">
<encoder class="ch.qos.der.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
(2)FileAppender
作⽤是将⽇志写⼊到⽂件中去。配置⽅式:
<appender name="FILE" class="ch.FileAppender">
<file>存储路径</file>
<!-- true表⽰添加到⽂件结尾,false表⽰清空⽂件 -->
<append>true</append>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
(3)RollingFileAppender
作⽤是滚动记录⽂件,先将⽂件记录到指定⽂件,当符合某个条件时,再将⽂件记录到其他的⽂件中去。配置⽅式:
<appender name="ERROR" class="ch.olling.RollingFileAppender">
<rollingPolicy class="ch.olling.TimeBasedRollingPolicy">
<!--⽇志⽂件输出的⽂件名-->
<FileNamePattern>${LOG_HOME}/error/spring-error-%d{yyyy-MM-dd}.log</FileNamePattern>
<!--⽇志⽂件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.der.PatternLayoutEncoder">
<!--格式化输出:%d表⽰⽇期,%thread表⽰线程名,%-5level:级别从左显⽰5个字符宽度%msg:⽇志消息,%n是换⾏符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--⽇志⽂件最⼤的⼤⼩-->
<triggeringPolicy class="ch.olling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误⽇志 -->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
(4)异步写⽇志
通常⽇志会记录到⽂件中去,此时写⼀次就会造成⼀次磁盘IO,⽽采取异步写⽇志⽅式后,不让此次写⽇志阻塞线程,造成不必要的性能损耗。配置⽅式:
<!-- 异步输出 -->
<appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">
<!-- 不丢失⽇志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的⽇志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>512</queueSize>
<!-- 添加附加的appender,最多只能添加⼀个 --> <appender-ref ref ="ERROR"/>
</appender>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论