gpt4 book ai didi

java - FileAppender 打开 FileHandle 但从不记录

转载 作者:行者123 更新时间:2023-12-01 05:15:22 25 4
gpt4 key购买 nike

在我当前的项目中,我需要让某个任务创建自己的日志文件,与 log4j.properties 中配置的内容分开。

我尝试通过将动态创建的 FileAppender 附加到 rootLogger 来实现此目的:

public static void setupAnalysisLogfile(String filename) {
PatternLayout layout
= new PatternLayout("%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %-5p %C{1} %x - %m%n");
if(Config.CREATE_SEPERATE_LOG)
{
FileAppender appender;
try {
String path = (Config.LOGFILE_PATH!=null)?Config.LOGFILE_PATH:filename;
appender = new FileAppender(layout,path);
appender.setName("Analysis Appender");
org.apache.log4j.Logger.getLogger("my.package.hierarchy").addAppender(appender);
} catch (IOException e) {
org.apache.log4j.Logger.getLogger(Config.class).warn(
"Failed to create a dedicated log "
+ filename,
e);
}
}
}

当 Config.LOGFILE_PATH 不为空(来自命令行参数)时,一切正常。日志文件在指定路径中创建。

但是,当LOGFILE_PATH为空时,不会创建日志文件,或者没有任何内容写入其中

使用 -Dlog4j.debug 运行程序给出:

log4j: setFile called: /home/tbender/.something/bytecode/OMFG_3527961e3fb1134e1d3221c000879a90ff1022b6/bytecode/OMFG-1340994475441.log, true
log4j: setFile ended

当我单步执行代码并密切关注打开的文件句柄列表时,我可以看到文件句柄是在创建附加程序期间创建的。应用程序完成后,不存在日志文件。

有什么想法吗?

最佳答案

好吧,最后不是 FileAppend 导致了问题,而是一段完全不相关的代码删除并重新创建了我的日志文件所在的文件夹。天啊!

解决这样的问题的好技巧:当你在 Linux 中时使用 strace:

strace -tt -f -e trace=create,open,close,unlink -o strace.out java -jar yourjar.jar

这将向您显示创建、打开、关闭或删除的文件。您还可以包含许多其他内容。更多电话可查询here

关于java - FileAppender 打开 FileHandle 但从不记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11300554/

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