Log4j2 配置
日志配置需求
*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 会自动加载并使用该配置。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性