一直对Log4j2的配置文件没有一个全局的清晰认识,于是去查看了官网文档,对常用配置做了一些官网的翻译和理解,整体配置文档译自官网:http://logging.apache.org/log4j/2.x/manual/configuration.html。
目录
一、配置文件框架
二、XML配置
三、配置详细介绍
1、< Configuration >
2、< Appenders >
< RollingFileAppender >
3、< Loggers >
< Logger >
< Root >
4、配置过滤器< Filters >
5、< Properties >
四、 log4j2.xml案例分析
首先给出一个最简单的日志配置格式
启动项目会得到一些这样的打印。 修改
11:47:55.888 [main] INFO com.fc.asset.FcAssetApplication - Starting FcAssetApplication on
11:47:55.890 [main] DEBUG com.fc.asset.FcAssetApplication - Running with Spring Boot v2.3.1.RELEASE, Spring v5.2.7.RELEASE
11:47:55.890 [main] INFO com.fc.asset.FcAssetApplication - No active profile set, falling back to default profiles: default
11:47:55.890 [main] DEBUG org.springframework.boot.SpringApplication - Loading source class com.fc.asset.FcAssetApplication
log4j2支持多种格式的配置文件,例如XML、Json等,本篇文章以XML为例。可以使用两种格式配置log4j2.xml, 可以在其父元素下声明标签,也可以在父元素中增加一个属性,且元素和属性名均不区分大小写,因此:以下几种配置效果相同。但推荐标签首字母大写,属性小写。
%m%n
除了上述简洁的XML格式外,Log4j还允许以更“常规”的XML方式指定配置,可以将上面的标签名称替换为对象类型来实现。例如,不是使用名为Console的标签来配置ConsoleAppender,而是将其配置为具有包含“ Console”的type属性的appender标签。
...
常用属性(其余属性略):
属性名称 | 描述 |
status | 记录到控制台的内部Log4j事件的级别。此属性的有效值为“ trace”,“ debug”,“ info”,“ warn”,“ error”和“ fatal”。Log4j将有关初始化、过渡和其他内部操作的详细信息记录到状态记录器中。如果需要对log4j进行故障排除,则可设置status =“ trace” (或者,设置系统属性log4j2.debug也会将内部Log4j2日志记录打印到控制台,包括在找到配置文件之前进行的内部日志记录。) |
monitorInterval | 从文件配置后,Log4j能够自动检测对配置文件的更改并自行重新配置。如果在配置元素上指定了monitorInterval属性,并且将其设置为非零值,则下次评估和/或记录日志事件并且自上次检查以来已经过monitorInterval时,将检查文件。下例显示了如何配置属性,以便仅在至少30秒之后检查配置文件的更改。最小间隔为5秒。 |
例如:
该部分详细配置可见官网:http://logging.apache.org/log4j/2.x/manual/appenders.html
可以使用特定的appender标签名称或者
常用标签:
标签名称 | 描述 |
控制台日志打印配置 | |
最普通的文件日志打印配置 | |
增加了缓存和滚动策略的文件日志打印配置 | |
RollingRandomAccessFileAppender与RollingFileAppender相似,除了它会被缓存且在内部它使用ByteBuffer + RandomAccessFile而不是BufferedOutputStream。与RollingFileAppender相比,性能提高了20-200%。 |
是Log4j2中的一种能够实现日志文件滚动更新(rollover)的Appender。
常用属性:
属性或标签名称 | 描述 |
name | Appender name,必填 |
fileName | 存储文件名 |
filePattern | 文件归档名模式、滚动策略(当文件大小或时间满足一定条件,则写入新的日志文件) 其中SimpleDateFormat兼容的日期/时间模式决定滚动时间策略的时间单位 %i代表从1开始的整数计数器,%3i可将计数器填充至三位,%03i可用0将计数器填充到3位 |
layout | 日志打印格式 |
policy | 日志需要滚动归档的触发条件,例如:文件大小、时间 |
通过max属性设置同一时间的整数计算器下最多的日志文件数,超过后从最旧的开始自动删除
可以删除任何文件,而不仅仅是删除日志文件,因此请谨慎使用此操作! 使用testMode参数可以测试配置,而不会意外删除错误的文件。 |
以下滚动策略为:每当日志生成超过1天,或者大小超过20MB,就生成新的日志文件进行滚动归档。如果不设置每个日志的容量大小,则不论interval是几天,结尾计算器永远是_1,因为在这个不重复的时间段内只会有一个日志文件,即使时间间隔是两天。
modulate=true:时间修正,从0点开始计算interval而不是从现在开始。
其中:
日志打印配置,只有此处配置了Appender,Appender才会生效。
属性名称 | 描述 |
name | 必填,该项仅打印包含该name的日志信息 |
level | 非必填,默认ERROR。日志打印级别,可以配置为TRACE,DEBUG,INFO,WARN,ERROR,ALL或OFF之一 |
additivity | 非必填,默认true。该Logger是否附加给Root(此参数详细介绍看 |
log4j2允许日志打印到一个或多个目标文件,该标签可以配置一个或多个AppenderRef子元素,ref属性值与该name的Appender关联,每一个Appender为一个日志输出目标。
Root用来收集所有的
以下配置了
该部分详细配置可见官网文档:http://logging.apache.org/log4j/2.x/manual/filters.html
Log4j允许在以下四个位置中指定一个过滤器:
常用Filter标签介绍:
标签名称 | 描述 |
允许或阻止不同级别的日志打印。>=level配置的日志级别将匹配onMatch,否则匹配onMismatch; 例如: |
Log4j2支持在配置中定义全局属性,name属性必须存在且唯一,允许使用${name}来引用该变量。
例如:以下配置定了LOG_HOME的全局属性
../logs/xxx
要使用该属性,需要使用${LOG_HOME} 来引用
...
在文章的最后,给一个简单的log4j2.xml配置文件案例:
../logs/fc-asset
${LOG_HOME}/history
日志打印结果:
根据以上的滚动策略配置可知,生成的日志为2秒一个,且设置了1KB文件大小的容量,每一个计数器内的日志个数不能超过2,完美符合。
以上配置如果删去