我需要立即将日志刷新到磁盘,然后将其转换为正常缓冲模式。
要求是我需要生成每小时日志。例如,user_info.2017-09-08-18.log。每小时都会生成一个。因此,我使用ScheduledExecutorService编写一个简单的字符串,以便在每小时开始时记录。但我发现如果缓冲区未满,则日志仍在缓冲区中。所以我想在每小时开始时立即写一个日志,确保每小时都有一个日志。所以Logger.shutdown()在这种情况下不是一个合适的方法。
这是我的属性定义:
log4j.appender.user_push_info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.user_info.File=/data/log/user_info
log4j.appender.user_info.DatePattern='.'yyyy-MM-dd-HH'.log'
log4j.appender.user_info.layout=org.apache.log4j.PatternLayout
log4j.appender.user_info.layout.ConversionPattern=%m%n
log4j.appender.user_info.BufferedIO=true
log4j.appender.user_info.BufferSize=8192
答案 0 :(得分:1)
对于Log4j 1.2,您可以使用set immediate flush恢复正常行为:
Logger logger = Logger.getRootLogger();
Appender appender = logger.getAppender("name");
if ( appender instanceof WriterAppender ) {
( (WriterAppender) appender ).setImmediateFlush(true);
logger.info("Flushing log");
( (WriterAppender) appender ).setImmediateFlush(false);
}