gpt4 book ai didi

log4j - JVM 退出时如何刷新 log4j 附加程序?

转载 作者:行者123 更新时间:2023-12-04 02:53:33 24 4
gpt4 key购买 nike

我在 log4j.properties 中使用 bufferedIO=true 和 bufferSize=8KB,但假设服务器由于某种原因崩溃/重启并且缓冲区未满,那么缓冲区中的日志将会丢失。那么如何恢复这些日志呢?

最佳答案

如果 JVM 崩溃,它们将无法恢复。它们缓冲在内存中,当程序崩溃时,内存基本上消失了。

如果 JVM 由于某种原因刚刚退出,可以使用关闭钩子(Hook)。 LogManager.shutdown() 将刷新日志 ( https://stackoverflow.com/a/3078377/647701 )。因此只需将其添加为关闭 Hook 即可。

/**
* Demonstrating how to flush buffered log4j logs to file when virtual machine exits.
*
*/
public class Log4JBufferWriterOnJVMExit {

public static void main(String[] args) throws IOException {
Logger log = initializeSomeLogToTestTheFlushing();

log.info("Here");

Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
LogManager.shutdown();
}
});
}

private static Logger initializeSomeLogToTestTheFlushing() throws IOException {
FileAppender fileAppender = new FileAppender(new SimpleLayout(), "buffered.log", false, true, 8 * 1204);
Logger.getRootLogger().removeAllAppenders();
Logger.getRootLogger().addAppender(fileAppender);
Logger log = Logger.getLogger(Log4JBufferWriterOnJVMExit.class);
return log;
}
}

关于log4j - JVM 退出时如何刷新 log4j 附加程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17141103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com