目录
- 配置思路
- 示例配置文件(
log4j2.xml
) - 配置解释
日志配置需求
*INFO日志和ERROR日志分开定义
*有些包是INFO模式,有些是DEBUG模式
*默认是WARN模式
*可动态生效日志配置
配置思路
- 定义 Appenders:分别创建用于输出
INFO
日志、ERROR
日志和控制台日志的 Appender。 - 配置 Loggers:设置根 Logger 的默认日志级别为
WARN
,然后为特定的包配置不同的日志级别。
示例配置文件(log4j2.xml
)
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30"><!-- 定义属性,用于指定日志文件路径 --><Properties><Property name="logPath">logs</Property></Properties><!-- 定义 Appenders --><Appenders><!-- 控制台输出 --><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/></Console><!-- INFO 日志文件输出 --><RollingFile name="InfoFile" fileName="${logPath}/info.log"filePattern="${logPath}/info-%d{yyyy-MM-dd}.log.gz"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/><Filters><!-- 只允许 INFO 级别日志通过 --><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/></Filters><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="10 MB"/></Policies><DefaultRolloverStrategy max="10"/></RollingFile><!-- ERROR 日志文件输出 --><RollingFile name="ErrorFile" fileName="${logPath}/error.log"filePattern="${logPath}/error-%d{yyyy-MM-dd}.log.gz"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/><Filters><!-- 只允许 ERROR 及以上级别日志通过 --><ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/></Filters><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="10 MB"/></Policies><DefaultRolloverStrategy max="10"/></RollingFile></Appenders><!-- 定义 Loggers --><Loggers><!-- 根 Logger,默认级别为 WARN --><Root level="WARN"><AppenderRef ref="Console"/><AppenderRef ref="InfoFile"/><AppenderRef ref="ErrorFile"/></Root><!-- 特定包使用 INFO 模式 --><Logger name="com.somepackage.info" level="INFO" additivity="false"><AppenderRef ref="Console"/><AppenderRef ref="InfoFile"/><AppenderRef ref="ErrorFile"/></Logger><!-- 特定包使用 DEBUG 模式 --><Logger name="com.somepackage.debug" level="DEBUG" additivity="false"><AppenderRef ref="Console"/><AppenderRef ref="InfoFile"/><AppenderRef ref="ErrorFile"/></Logger></Loggers>
</Configuration>
配置解释
-
monitorInterval="30":该属性设置了 Log4j2 检查配置文件是否有更改的时间间隔(单位为秒),这里设置为 30 秒,即每 30 秒检查一次配置文件,如果有修改,会自动重新加载配置,实现动态生效。
-
Properties:定义了一个属性
logPath
,用于指定日志文件的存储路径。 -
Appenders:
- Console:将日志输出到控制台。
- InfoFile:将
INFO
级别的日志输出到文件,并按时间和文件大小进行滚动。通过ThresholdFilter
只允许INFO
级别的日志通过。 - ErrorFile:将
ERROR
及以上级别的日志输出到文件,并按时间和文件大小进行滚动。通过ThresholdFilter
只允许ERROR
及以上级别的日志通过。
-
Loggers:
- Root:根 Logger,默认日志级别为
WARN
,关联了控制台、INFO
日志文件和ERROR
日志文件。 - com.somepackage.info:特定包的 Logger,日志级别为
INFO
,不将日志传递给父 Logger(additivity="false"
),关联了控制台、INFO
日志文件和ERROR
日志文件。 - com.somepackage.debug:特定包的 Logger,日志级别为
DEBUG
,不将日志传递给父 Logger(additivity="false"
),关联了控制台、INFO
日志文件和ERROR
日志文件。
- Root:根 Logger,默认日志级别为
additivity="true"(默认值):当 additivity 属性设置为 true 或者不指定该属性时,当前 Logger 记录的日志除了会按照自身配置的 Appender 进行输出外,还会将日志传递给其父 Logger 继续处理。父 Logger 会根据自身的配置决定是否对这些日志进行输出。
additivity="false":当 additivity 属性设置为 false 时,当前 Logger 记录的日志只会按照自身配置的 Appender 进行输出,不会再传递给其父 Logger。
将上述配置文件放在类路径下(如 src/main/resources
目录),Log4j2 会自动加载并使用该配置。