一个Java项目的日志文件

时间:2014-05-02 13:22:23

标签: java logging

我想在一个日志文件中跟踪用于调试的Java项目主要活动日志。我使用以下方法打开现有文件,并附加新内容,但似乎每次运行程序时都会在名称前添加另一个文件1,2,3。虽然logfile.log不断更新,但存储了所需的内容。但是,我无法弄清楚为什么创建了其他logfile.log.2,logfile.log.3 ...文件

     LoggerFile lf = new LoggerFile();
     final FileHandler fh = new FileHandler(System.getProperty("user.dir")+"/logfile.log", 1024 * 1024, 1, true);
     Logger logger = lf.initialize(fh);
     logger.info("log file message ... ");
     fh.close();

以下是LoggerFile的样子:

     public class LoggerFile {
        public LoggerFile() {

        }
        public Logger initialize(FileHandler fh) throws SecurityException, IOException{
        Logger logger = Logger.getLogger("MyLog");//Logger.getLogger(UpdateExposureScores.class.getName()); 
        logger.addHandler(fh);
        SimpleFormatter formatter = new SimpleFormatter();  
        fh.setFormatter(formatter);
        return logger;
        }
     }

在上面的代码中,将日志写入多个文件似乎有什么问题?提前谢谢。

1 个答案:

答案 0 :(得分:1)

我假设您使用的是java.util.logging。来自j.u.l.FileHandler文档:

  

通常,“%u”唯一字段设置为0.但是,如果FileHandler尝试打开文件名并发现该文件当前正由另一个进程使用,则会增加唯一编号字段并重试。这将重复进行,直到FileHandler找到当前未使用的文件名。如果存在冲突且未指定“%u”字段,则会在点后面的文件名末尾添加该字段。 (这将在任何自动添加的世代号之后。)

在同一进程中打开多个文件处理程序也具有相同的效果。添加行以记录java.lang.management.ManagementFactory.getRuntimeMXBean().getName()java.lang.management.ManagementFactory.getRuntimeMXBean().getStartTime()的结果,以便您可以识别正在创建日志文件的JVM。您要么创建指向同一位置的太多文件处理程序,要么启动应用程序的多个实例。

您可能需要查看LogManager文档,该文档将介绍配置日志设置的其他方法。