繁体   English   中英

一个Java项目的日志文件

[英]One Log file for a Java project

我想跟踪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;
        }
     }

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

我假设您正在使用java.util.logging。 julFileHandler文档中:

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

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

您可能需要查看LogManager文档,该文档将说明配置日志设置的替代方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM