如何刷新缓冲的 log4j FileAppender?
在log4j中,当使用具有BufferedIO = true和BufferSize = xxx属性(即启用缓冲)的文件应用程序时,我希望能够在正常关闭过程中刷新日志。关于如何做到这一点的任何想法?
在log4j中,当使用具有BufferedIO = true和BufferSize = xxx属性(即启用缓冲)的文件应用程序时,我希望能够在正常关闭过程中刷新日志。关于如何做到这一点的任何想法?
关闭 LogManager 时:
LogManager.shutdown();
将刷新所有缓冲的日志。
public static void flushAllLogs()
{
try
{
Set<FileAppender> flushedFileAppenders = new HashSet<FileAppender>();
Enumeration currentLoggers = LogManager.getLoggerRepository().getCurrentLoggers();
while(currentLoggers.hasMoreElements())
{
Object nextLogger = currentLoggers.nextElement();
if(nextLogger instanceof Logger)
{
Logger currentLogger = (Logger) nextLogger;
Enumeration allAppenders = currentLogger.getAllAppenders();
while(allAppenders.hasMoreElements())
{
Object nextElement = allAppenders.nextElement();
if(nextElement instanceof FileAppender)
{
FileAppender fileAppender = (FileAppender) nextElement;
if(!flushedFileAppenders.contains(fileAppender) && !fileAppender.getImmediateFlush())
{
flushedFileAppenders.add(fileAppender);
//log.info("Appender "+fileAppender.getName()+" is not doing immediateFlush ");
fileAppender.setImmediateFlush(true);
currentLogger.info("FLUSH");
fileAppender.setImmediateFlush(false);
}
else
{
//log.info("fileAppender"+fileAppender.getName()+" is doing immediateFlush");
}
}
}
}
}
}
catch(RuntimeException e)
{
log.error("Failed flushing logs",e);
}
}