普通项目
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.11</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.11</version> </dependency>
springboot项目
<!--该依赖已经集成了logback--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
Logback默认会到类路径下找logback-test.xml and logback.xml
Spring Boot 会在 classpath 下查找是否有 logback-test.groovy、logback-test.xml、logback.groovy 或者 logback.xml,如果都找不到的话,才会加载项目路径下的 logback-spring.xml
logger: 日志记录器,root是特殊的logger-顶层logger,因为logger具有继承关系,稍后介绍
appender: 配置日志文件输出目的地
encoder: 控制日志输出格式,它是借助于layout实现的
rollingPolicy: RollingFileAppender具有该子元素,指定发生滚动时的行为
triggeringPolicy: RollingFileAppender具有该子元素,指定何时发生滚动过程,一般不用配置该元素,因为最受欢迎的TimeBasedRollingPolicy ,它实现了rolling policy同时也实现了triggering policy。
filter: 对appender收到的日志进行过滤,只有满足Filter条件的日志才输出到日志文件
logger组件具有父子层级关系,root是最顶层的logger。logger记录器是命名实体。它们的名称区分大小写,并且遵循分层命名规则.
如果一个记录器的名称后跟一个点,则该记录器是另一个记录器的祖先,该后跟点的名称是其后代记录器名称的前缀。如果记录器与子记录器之间没有祖先,则称该记录器为子记录器的父项。 例如,名为"com.foo"的记录器是名为"com.foo.Bar"的记录器的父项。同样, "java"是"java.util"和"java.util.Vector"的祖先记录器。大多数开发人员都应该熟悉这种命名方案。
logger日志级别继承
如果未为给定的记录器分配一个级别,则它将从其最接近的祖先那里继承一个已分配的级别。例如: 给定记录器L的有效级别等于其层次结构中的第一个非空级别,从L本身开始, 然后在层次结构中向上寻找直到root logger。为了确保所有记录器最终都可以继承级别,root logger始终具有分配的级别,root logger默认级别是DEBUG。
注意:如果日志记录请求的级别高于或等于记录器的有效级别,则该日志请求是有效的。日志级别按以下顺序排序: TRACE < DEBUG < INFO < WARN < ERROR。
logger关联的appender继承
一个logger可以配置多个appender,logger输出的日志会输出到当前记录器绑定的appender和父级们logger(直到root logger)绑定的appender,可以设置additivity 属性为false,则logger输出的日志仅会输出到当前记录器绑定的appender
如果additivity为true,会存在重复输出日志情况,如下所示
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="chapters.configuration"> <appender-ref ref="STDOUT" /> </logger> <root level="debug"> <appender-ref ref="STDOUT" /> </root> </configuration>
那么chapters.configuration包下的日志会输出两遍到console控制台,如下所示
14:25:36.343 [main] INFO chapters.configuration.MyApp3 - Entering application.
14:25:36.343 [main] INFO chapters.configuration.MyApp3 - Entering application.
14:25:36.359 [main] DEBUG chapters.configuration.Foo - Did it again!
14:25:36.359 [main] DEBUG chapters.configuration.Foo - Did it again!
14:25:36.359 [main] INFO chapters.configuration.MyApp3 - Exiting application.
14:25:36.359 [main] INFO chapters.configuration.MyApp3 - Exiting application.
配置日志输出的目的地,常用的有ConsoleAppender、FileAppender 、RollingFileAppender
ConsoleAppender
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!--默认System.out,也可以指定System.error --> <target>System.out</target> <!-- encoders 默认类型ch.qos.logback.classic.encoder.PatternLayoutEncoder --> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern> </encoder> </appender>
写日志到标准输出流,可以配置target属性为system.out,也可以指定System.error,默认System.out
FileAppender
包含的子元素有
RollingFileAppender
扩展了FileAppender,具有滚动更新日志文件的功能;例如,RollingFileAppender可以登录到一个名为log.txt的文件,一旦满足某个条件,就可以保存当前日志文件,并滚动输出到新的日志文件。
包含的子元素有
rollingPolicy
rollingPolicy常用的有TimeBasedRollingPolicy、SizeAndTimeBasedRollingPolicy
TimeBasedRollingPolicy
TimeBasedRollingPolicy是最受欢迎的滚动策略。它基于时间进行滚动,可以是按月或按天等。TimeBasedRollingPolicy承担滚动以及触发所述滚动的责任。它实现了rolling policy同时也实现了triggering policy。
包含的子元素有
SizeAndTimeBasedRollingPolicy
支持按照时间拆分后,再按文件大小拆分
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>mylog.txt</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- rollover daily --> <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern> <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> <maxFileSize>100MB</maxFileSize> <maxHistory>60</maxHistory> <totalSizeCap>20GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%msg%n</pattern> </encoder> </appender>
"%i"表示当日志文件达到“maxFileSize”它将按照递增序列(以0开始)归档日志。
triggering policy
SizeBasedTriggeringPolicy
该triggering policy通过配置一个maxFileSize参数,当日志文件超过该阈值,会通知RollingFileAppender 触发日志翻滚。但一般triggering policy可以不用配置,TimeBasedRollingPolicy 已经完美集成了。
补充:以上Appender都是本地记录日志,logback也支持网络输出日志、本地数据、邮件等;后续如果有需要再来研究。logback还可以使用AsyncAppender异步记录日志。
Encoder
encoder负责转换事件为字节数组并将字节数组写入输出流中。PatternLayoutEncoder 是最常用的encoder,该类通过使用PatternLayout来格式化日志事件。我们可以直接配置PatternLayoutEncoder ,而不用配置PatternLayout,它默认使用PatternLayout进行格式输出。
layout
负责转换事件成字符串,我们可以自定义layout,然后通过encoder引用
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="chapters.layouts.MySampleLayout" /> </encoder>
PatternLayout
它将日志事件转换成字符串,但是可以自定义字符串通过调整PatternLayout的转换模式。
PatternLayout的转换模式跟C语言的printf()函数紧密相关。
常用的模式有:
% d{pattern}: 日期
% level 日志级别
%thread 线程名称
%class 全限定类名,日志请求记录所在的类
%method 日志请求记录所在的方法
%line 日志请求记录的行号
%n 换行
%logger{length} 输出日志logger记录器的名字,length指定输出名字长度,logback会智能缩写而不丢失语义。
%msg 输出日志记录器记录的消息
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS,CTT} %-5level [%thread] [%class:%line] %logger{50} - %msg%n</pattern> </encoder>
多个模式之间分隔符,在大多数情况下,文字需包含空格或其他分隔字符('[',']','-'),这样就不会与转换词混淆
Filter
对appender收到的日志调用decide方法进行过滤,只有满足Filter条件的日志才输出到日志文件,decide方法有三个返回值,DENY、ACCEPT、NEUTRAL
LevelFilter
该过滤器对日志的级别过滤,如果事件日志级别等于配置的级别,过滤器接受或者拒绝该事件日志,依赖于onMatch 和 onMismatch属性
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <pattern> %-4relative [%thread] %-5level %logger{30} - %msg%n </pattern> </encoder> </appender>
ThresholdFilter
过滤低于指定阈值的事件。对于等于或高于阈值的事件,将在调用其()方法时响应NEUTRAL 。但是,级别低于阈值的事件将被拒绝。
<!-- deny all events with a level below INFO, that is TRACE and DEBUG --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter>
EvaluatorFilter
EvaluatorFilter 是封装了的通用过滤器 EventEvaluator。顾名思义, 评估对象是否满足给定事件的给定条件。在匹配和不匹配时,托管将分别返回由onMatch 或onMismatch属性指定的值。
GEventEvaluator 实现了EventEvaluator,通过子元素采用任意Groovy语言布尔表达式作为评估标准的具体实现
JaninoEventEvaluator实现了EventEvaluator,通过子元素采用任意Java语言块返回布尔值作为评估标准。
uatorFilter
EvaluatorFilter 是封装了的通用过滤器 EventEvaluator。顾名思义, 评估对象是否满足给定事件的给定条件。在匹配和不匹配时,托管将分别返回由onMatch 或onMismatch属性指定的值。
GEventEvaluator 实现了EventEvaluator,通过子元素采用任意Groovy语言布尔表达式作为评估标准的具体实现
JaninoEventEvaluator实现了EventEvaluator,通过子元素采用任意Java语言块返回布尔值作为评估标准。
EvaluatorFilter 也可通过子元素支持正则匹配。
到此这篇关于详解Springboot之Logback的使用学习的文章就介绍到这了,更多相关Logback详解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
免责声明:本站发布的内容(图片、视频和文字)以原创、来自互联网转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系QQ:712375056 进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
Copyright © 2009-2021 56dr.com. All Rights Reserved. 特网科技 特网云 版权所有 珠海市特网科技有限公司 粤ICP备16109289号
域名注册服务机构:阿里云计算有限公司(万网) 域名服务机构:烟台帝思普网络科技有限公司(DNSPod) CDN服务:阿里云计算有限公司 中国互联网举报中心 增值电信业务经营许可证B2
建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站