gpt4 book ai didi

java - 使用 Java.util 的 Logger 和 FileHandler 类时,几秒钟后日志文件未更新

转载 作者:行者123 更新时间:2023-11-30 08:24:47 30 4
gpt4 key购买 nike

我正在使用以下类“LoggerUtil”来记录到控制台和文件“logfile.log”。控制台的日志记录工作正常。但是,日志记录到“logfile.log”文件会在几条日志后停止。欢迎提出有关查找错误的任何建议。我附上下面的代码:

public class LoggerUtil {   
public static final String LOGGERNAME = "project.logging";

static {
try {
Logger.getLogger(LOGGERNAME).setUseParentHandlers(false);
Handler ch = new ConsoleHandler();
Handler fh = new FileHandler("logfile.log");
SimpleFormatter sf = new SimpleFormatter();
fh.setFormatter(sf);
Logger.getLogger(LOGGERNAME).addHandler(ch);
Logger.getLogger(LOGGERNAME).addHandler(fh);
setHandlersLevel(Level.ALL);
} catch (IOException | SecurityException ex) {
Logger.getLogger(LoggerUtil.class.getName()).log(Level.SEVERE, null, ex);
}
}

public static void setHandlersLevel(Level level) {
Handler[] handlers = Logger.getLogger(LOGGERNAME).getHandlers();
for (Handler h : handlers) {
h.setLevel(level);
}
Logger.getLogger(LOGGERNAME).setLevel(level);
}

public static Logger getLogger() {
return Logger.getLogger(LOGGERNAME);
}
}

我在我项目的不同地方调用了下面的代码来记录:

LoggerUtil.getLogger().log(Level.INFO, "Message to be logged");

请注意,我的项目是多线程的。各种线程使用相同的文件进行日志记录。这可能是并发问题还是只是转移注意力!

最佳答案

硬引用您的记录器。经验法则是在您的类中使用静态最终字段。

public static final String LOGGERNAME = "project.logging";
//Pin logger in memory.
private static final Logger logger = Logger.getLogger(LOGGERNAME);

来自记录器。 getLogger(String)文档:

Note: The LogManager may only retain a weak reference to the newly created Logger. It is important to understand that a previously created Logger with the given name may be garbage collected at any time if there is no strong reference to the Logger.

当记录器被垃圾收集时,您的 ConsoleHandler 和 FileHandler 不会重新附加到新记录器。

使用 FindBugs,因为它检测到这个 bug pattern :

LG: Potential lost logger changes due to weak reference in OpenJDK (LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE)

关于java - 使用 Java.util 的 Logger 和 FileHandler 类时,几秒钟后日志文件未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22689831/

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