我想在一个日志文件中跟踪用于调试的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;
}
}
在上面的代码中,将日志写入多个文件似乎有什么问题?提前谢谢。
答案 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文档,该文档将介绍配置日志设置的其他方法。