我正在使用 Log4j2,并且我需要我的日志:
- 在活动日志文件名中包含当前日期和进程 ID(例如,logname.529628.27-04-2025.log)
- 根据文件大小创建新日志(例如,每 10MB)
- 仅保留最大数量的旧文件(例如 10 个备份)
这就是我现在所拥有的:
<?xml version="1.0" encoding="UTF-8"?>
<Properties>
<Property name="LOG_PATTERN">
%-40.40c{1.} : %notEmpty{%m}%n%ex
</Property>
<Property name="PID">${sys:PID}</Property>
<Property name="FS">${sys:file.separator}</Property>
<Property name="log-path">log${sys:file.separator}</Property>
<Property name="log-pattern">%d{yyyy-MM-dd HH:mm:ss,SSS} PID:${sys:PID} %-2p [T@%tid-%t] [%F:%L] %notEmpty{%marker} %m%n</Property>
</Properties>
<Appenders>
<Routing name="Routing">
<Routes pattern="$${sys:logName}">
<Route key="testlog">
<RollingFile name="ArchiveLog" fileName="${log-path}logname.${sys:PID}.${date:dd-MM-yyyy}.log"
filePattern="${log-path}logname.${sys:PID}.${date:dd-MM-yyyy}.%i.log">
<PatternLayout pattern="${log-pattern}"/>
<Policies>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<DefaultRolloverStrategy max="10">
</DefaultRolloverStrategy>
</RollingFile>
</Route>
</Routes>
</Routing>
</Appenders>
<Loggers>
<Logger name="logname" level="trace" additivity="false">
<AppenderRef ref="Routing" />
</Logger>
<Root level="info">
<AppenderRef ref="Routing"/>
</Root>
</Loggers>
但似乎按大小旋转对于动态文件名无法正常工作。有什么想法吗?
谢谢!
旋转不起作用,因为 Log4j2 的 RollingFile 附加器需要活动文件名保持静态,添加
${date}
它会导致旋转混乱。要修复此问题,请保持 fileName 简单且静态,并仅在 filePattern 中使用 %d 模式,以便 Log4j2 可以正确处理基于大小的轮换和备份。
用这个替换你的
<RollingFile>
: