Log4j2 自动翻转调度器
Log4j2 auto rollover scheduler
如何配置 log4j2 每 30 秒翻转一次?
比如今天是2019-01-0909: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秒一次,甚至不再向日志写入数据。
我该怎么做?
我为我糟糕的英语道歉。
使用 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
我想到了这个选项
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;
}
}
如何配置 log4j2 每 30 秒翻转一次?
比如今天是2019-01-0909: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秒一次,甚至不再向日志写入数据。
我该怎么做?
我为我糟糕的英语道歉。
使用 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
我想到了这个选项
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;
}
}