如何配置log4j2每30秒进行一次翻转?
例如,如果今天是2019年1月9日09:45:00,我通过命令将数据写入日志文件
log.info("test")
在10分钟内没有更多数据要记录, 但我需要在2019-01-09 09:45:30 30秒后自动翻转日志文件。
如果我这样配置log4j2:
<RollingFile name="RollingFile">
<FileName>C:/log/mylog.log</FileName>
<FilePattern>C:/log/time-based-logs/%d{yyyy-MM-dd-hh-mm}.log.zip</FilePattern>
<PatternLayout>
<Pattern>%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="2" modulate="true" />
</Policies>
<DefaultRolloverStrategy max="5" />
</RollingFile>
我必须通过命令
写入日志数据log.info("test1") // 2019-01-09 09:55:00
然后在10分钟后转到翻转文件,但是我需要每30秒一次,甚至不再需要向日志中写入数据。
我该怎么办?
对于我的英语不好,我深表歉意。
答案 0 :(得分:1)
使用RollingFileAppender https://logback.qos.ch/manual/appenders.html#RollingFileAppender
和TimeBasedRollingPolicy https://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy
但是,这可以使您细化到分钟(和每秒,但不是30秒)。
如果这还不够,请编写自己的自定义RollingPolicy https://logback.qos.ch/apidocs/ch/qos/logback/core/rolling/RollingPolicy.html
或者只是扩展TimeBasedRollingPolicy以包括其他功能 https://logback.qos.ch/apidocs/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.html
答案 1 :(得分:0)
这个选项适合我
public class Utils {
public static void rollover(LoggerContext loggerContext) {
Map<String, Appender> appendersByName = loggerContext.getConfiguration().getAppenders();
appendersByName.values().forEach(appender -> {
if (appender instanceof RollingFileAppender) {
((RollingFileAppender) appender).getManager().checkRollover(new RolloverLogEvent());
}
});
}
}
@Plugin(name = "OnTriggeringPolicy", category = "Core", printObject = true)
public class OnCustomTriggeringPolicy implements TriggeringPolicy {
private RollingFileManager manager;
@PluginFactory
public static OnRolloverEventEventTriggeringPolicy createPolicy() {
return new OnRolloverPolicy();
}
@Override
public void initialize(RollingFileManager manager) {
this.manager = manager;
}
@Override
public boolean isTriggeringEvent(LogEvent logEvent) {
return manager.getFileSize() > 0;
}
}