【发布时间】:2018-01-26 00:48:13
【问题描述】:
我在 Java 8 中使用 log4j2(2.5 版)。
我需要一个只有一行的日志文件。因此,对于每次写入,如果前一行存在,则必须被新行覆盖。
log4j.properties:
name=testLoggerOneLine
appenders=console, logFile
appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=PatternLayout
appender.console.layout.pattern=[%-5level] %d{yyyy-MM-dd'T'HH:mm:ss.SSSZ}
[%t] %c{1} - %msg%n
appender.logFile.type=File
appender.logFile.name=LOGFILE
appender.logFile.fileName=C:/Users/mggl/workspace/Test/logs/Test.log
#appender.logFile.immediateFlush=true
#appender.logFile.append=false
#appender.logFile.createOnDemand=false
appender.logFile.layout.type=PatternLayout
appender.logFile.layout.pattern=%msg%n
loggers=logFile
logger.logFile.name=Test
logger.logFile.level=debug
logger.logFile.appenderRefs=logFile
logger.logFile.appenderRef.logFile.ref=LOGFILE
logger.logFile.additivity=false
rootLogger.level=debug
rootLogger.appenderRefs=stdout
rootLogger.appenderRef.stdout.ref=STDOUT
虚拟代码:
package Test.loggingTest;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class OneLineLog
{
public static void main( String[] args )
{
Logger logger = LogManager.getLogger("testLoggerOneLine");
logger.info("first writing");
logger.info("second writing");
logger.info("third writing");
}
}
在 Test.log 中必须只写入最后的日志信息。
附加值为 false 的选项会在每次应用程序启动时获取大量日志信息。我想在不重新启动应用程序的情况下对每一行执行相同的操作。
感谢任何线索或建议。提前致谢。
【问题讨论】:
-
出于好奇:为什么?
-
这是一个要求。如果是我,我不会这样写日志。
-
为什么会有人需要这个?顺便说一句,我不知道 log4j,但一条线的旋转可能是解决方案。
-
手动轮换对我有用。谢谢。