我想为log4j配置以下内容:
先决条件: OS是windows,log4j版本1.1.x,xml配置格式
这就是我所拥有的:
<?xml version="1.0"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="RollingAppender" class="org.apache.log4j.rolling.RollingFileAppender">
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="ActiveFileName" value="logs/app.log"/>
</rollingPolicy>
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%t][%c{1}:%L] %m%n" />
</layout>
</appender>
<root>
<priority value="INFO" />
<appender-ref ref="RollingAppender" />
</root>
</log4j:configuration>发布于 2021-04-16 20:46:10
即使您使用apache-log4j-extras (看起来是这样),也不可能立即获得这样的配置。您缺少的是一个每天都会导致滚动的TriggeringPolicy:只有当TimeBasedRollingPolicy同时用作RollingPolicy和TriggeringPolicy时,它才能正常工作。否则,它会触发每条消息的滚动。
因此,您需要创建这样一个类:
public class DailyTrigerringPolicy implements TriggeringPolicy {
private LocalDate lastDate;
@Override
public void activateOptions() {
lastDate = LocalDate.now();
}
@Override
public boolean isTriggeringEvent(Appender appender, LoggingEvent event, String filename, long fileLength) {
boolean result = !lastDate.equals(LocalDate.now());
lastDate = LocalDate.now();
return result;
}
}并将配置转换为如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "https://raw.githubusercontent.com/apache/log4j/trunk/src/main/resources/org/apache/log4j/xml/log4j.dtd" >
<log4j:configuration>
<appender name="RollingAppender" class="org.apache.log4j.rolling.RollingFileAppender">
<param name="file" value="${catalina.base}/logs/app.log" />
<!-- Rolls logs over and compresses the old ones -->
<rollingPolicy class="org.apache.log4j.rolling.FixedWindowRollingPolicy">
<param name="fileNamePattern" value="${catalina.base}/logs/app.%i.log.gz" />
<!-- These are default values: keeps up to 7 old logs
<param name="minIndex" value="1" />
<param name="maxIndex" value="7" />
-->
</rollingPolicy>
<!-- Triggers a rollover whenever one of its child policies does. -->
<triggeringPolicy class="org.apache.log4j.rolling.CompositeTriggeringPolicy">
<!-- Triggers a rollover when the file size exceeds 100 MiB -->
<triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
<param name="maxFileSize" value="104857600" />
</triggeringPolicy>
<!-- This is the class above: triggers a rollover once a day-->
<triggeringPolicy class="com.example.DailyTrigerringPolicy" />
</triggeringPolicy>
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%t][%c{1}:%L] %m%n" />
</layout>
</appender>
<root>
<priority value="INFO" />
<appender-ref ref="RollingAppender" />
</root>
</log4j:configuration>备注:正如你可能知道的那样,Log4j 1.x 6年前到达了它的终身制。它的后续Log4j 2.x具有所需的所有触发策略(cf )。文档),如果您愿意升级的话。
https://stackoverflow.com/questions/67124080
复制相似问题