FileAppender打开FileHandle但从不记录

时间:2012-07-02 20:15:40

标签: java logging log4j

在我当前的项目中,我需要创建一个与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 is null没有创建日志文件时,或者更确切地说没有写入任何日志文件

使用-Dlog4j.debug运行程序会产生:

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的,最后不是FileAppend造成了问题,而是一段完全不相关的代码,删除并重新创建了我的日志文件所在的文件夹。 D'OH!

这样的问题的好建议:当你在linux中时使用strace:

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

这将显示哪些文件已创建,已加密,已关闭或已删除。你还可以包括一堆其他的东西。可以找到更多来电here