springboot 日志管理之 log4j2
1、log4j2 简介
Apache Log4j2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些问题。被誉为是目前最优秀的Java日志框架。
2、项中引入 log4j2 的方式
2.1、springboot 项目中
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-logging
org.springframework.boot
spring-boot-starter-log4j2
2.2、普通 java 项目中
org.apache.logging.log4j
log4j-api
2.6.2
org.apache.logging.log4j
log4j-core
2.6.2
org.slf4j
slf4j-api
1.7.21
org.apache.logging.log4j
log4j-slf4j-impl
2.6.2
3、在项目中指定 log4j2 的配置文件
如果 log4j2 框架使用的是 springboot 默认的命名方式 log4j2-spring.xml ,则不需要配置,直接在项目的 resources 目录下创建 log4j2-spring.xml 文件即可;如果使用自定义命名的方式,需要在项目的配置文件中 application.yml 中添加以下配置。
logging: config: classpath:my_log4j2.xml
4、log4j2 配置文件详解
4.1、configuration 标签
status:记录到控制台的内部Log4j事件的级别。此属性的有效值为 trace, debug, info, warn, error, fatal”。 monitorInterval: 从文件配置后,Log4j能够自动检测对配置文件的更改并自行重新配置。以便仅在至少30秒之后检查配置文件的更改。默认为5秒。
4.2、Properties 标签
Properties 标签定义全局属性,name属性必须存在且唯一,允许使用${name}来引用该变量。
../logs/xxx
4.3、Appenders 标签
4.3.1、日志输出到控制台(Console 标签)
有几个参数:
name:指定Appender的名字;
target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT;
PatternLayout:输出格式,不设置默认为:%m%n。
4.3.2、日志输出到文件(File 标签)
有以下几个参数:
name:指定Appender的名字;
fileName:指定输出日志的目的文件带全路径的文件名;
append:是否追加,默认为
PatternLayout:输出格式,不设置默认为:%m%n。
4.3.3、滚动日志输出到文件(RollingFile 标签)
有以下几个参数:
name:指定Appender的名字。
fileName:指定输出日志的目的文件带全路径的文件名。
PatternLayout:输出格式,不设置默认为:%m%n。
filePattern:指定新建日志文件的名称格式。
Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志。
TimeBasedTriggeringPolicy:Policies 子节点,基于时间的滚动策略,interval 属性用来指定多久滚动一次,默认是 1 小时。modulate=true用来对备份日志的生成时间纠偏,纠偏以0为基准进行,”0+interval”决定启动后第一次备份时间;
SizeBasedTriggeringPolicy:Policies 子节点,基于指定文件大小的滚动策略,size 属性用来定义每个日志文件的大小;
DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过 max 属性)。
4.4、loggers 节点
常见的有两种:Root 和 Logger。
4.4.1、root 标签
Root 节点用来指定项目的根日志,如果没有单独指定 Logger,那么就会默认使用该 Root 日志输出。
level:日志输出级别;
AppenderRef:Root 的子节点,用来指定该日志输出到哪个 Appender。
4.4.2、logger 标签
Logger 节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。
level:日志输出级别;
name:用来指定该 Logger 所适用的类或者类所在的包全路径,继承自Root节点;
AppenderRef:Logger 的子节点,用来指定该日志输出到哪个 Appender,如果没有指定,就会默认继承自 Root。如果指定了,那么会在指定的这个 Appender 和 Root 的 Appender 中都会输出,此时我们可以设置 Logger 的 additivity=”false” 只在自定义的 Appender 中进行输出。
4.5、Filter 标签
允许在以下四个位置中指定过滤器:由全局到局部依次是 configuration,Logger ,Appender ,Appender Reference。注意:全局 Filter 标签 Filters 放在 properties 标签之后。
常用的 filter:
1)、CompositeFilter : 组合模式,用以向外界提供统一的访问接口。
2)、ThresholdFilter : 这个Filter负责按照所配置的日志级别过滤日志,等于或超出所配置级别的日志将返回onMatch结果。
3)、 LevelRangeFilter : 这个Filter也是负责按照日志级别过滤日志,只是相比较于ThresholdFilter,它比较的是指定区间范围。这里有一个需要密切注意就是其两个参数minLevel,maxLevel的配置;如果想要只保留WARN到ERROR级别的日志,那么应该如下配置:
4)、 DynamicThresholdFilter :这个Filter允许依据ThreadContext中是否存在特定的某些值,以及日志级别来过滤LOG。
%d %p %c{1.} [%t] %m%n
4.6、指定使用的激活环境
在某个 appender 上添加 SpringProfile 标签,设置使用当前 appender 的激活环境。
5、log4j2-spring.xml 文件
<!---->
<!---->
6、日志配置信息的符号解释
-X号 # X信息输出时左对齐;
%p # 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d # 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%r # 输出自应用启动到输出该log信息耗费的毫秒数
%c # 输出日志信息所属的类目,通常就是所在类的全名
%t # 输出产生该日志事件的线程名
%l # 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10)
%x # 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%% # 输出一个"%"字符
%F # 输出日志消息产生时所在的文件名称
%L # 输出代码中的行号
%m # 输出代码中指定的消息,产生的日志具体信息
%n # 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日志信息换行
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
1) %20c # 指定输出全类名最小的宽度是20,如果全类名小于20的话,默认的情况下右对齐。
2) %-20c # 指定输出全类名最小的宽度是20,如果全类名小于20的话,"-"号指定左对齐。
3) %.30c # 指定输出全类名最小的宽度是30,如果全类名大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
4) %20.30c # 如果全类名小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉
总结:log4j2 日志框架是基于 log4j 和 logback 的升级,是当前应用最为广泛的一种框架,以上详解足以完成开发需求,更加详细配置请参考:Log4j – Configuring Log4j 2。
本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/c79af620ff.html
