JavaLogger随机写入第二个文件
我有一个jar,它几乎每分钟都会从另一个脚本调用一次。在这个jar中,我创建了一个JavaLogger,它记录jar运行时发生的事情。JavaLogger写入的日志文件称为myLog.0。我有以下代码允许它转到.1/.2/.3/.4JavaLogger随机写入第二个文件,java,logging,jar,Java,Logging,Jar,我有一个jar,它几乎每分钟都会从另一个脚本调用一次。在这个jar中,我创建了一个JavaLogger,它记录jar运行时发生的事情。JavaLogger写入的日志文件称为myLog.0。我有以下代码允许它转到.1/.2/.3/.4 try { FileHandler fileHandler = new FileHandler(filePath, 5242880, 5, true); fileHandler.setFormatter(new java.util.logging.Forma
try {
FileHandler fileHandler = new FileHandler(filePath, 5242880, 5, true);
fileHandler.setFormatter(new java.util.logging.Formatter() {
@Override
public String format(LogRecord logRecord) {
return "[" + logRecord.getLevel() + " " + createDateTimeLog() + "] " + logRecord.getMessage() + "\r\n";
}
});
logger.addHandler(fileHandler);
} catch (IOException e) {}
因此,我预计原木会增长。但是,每隔一段时间,日志就会打印到myLog.0.1。我猜这是因为文件被锁定了。然而,这从来不会发生在我的罐子运行中期。在jar运行的整个过程中,它都会登录到.0.1。文件是否仍然可以从我上次运行时锁定
如果是这样,我甚至尝试在Jar退出之前关闭处理程序。jar只有一个退出点,我将以下代码放在它前面:
MyLogger.logger.getHandlers()[0].close();
我已经通过调试器运行了它,并且只有一个处理程序(我添加的FileHandler)
正如我所说,这只是随机发生的。jar的前3次运行可能是到.0,然后第4次运行到.0.1。那么接下来的10可能又是正确的。很难说。然而,它确实经常发生(我想说,它大约每1/8的时间就写入.0.1)
任何想法/建议都很好。提前谢谢
文件是否仍然可以从我上次运行时锁定
可能是两个JVM同时运行您的jar。添加代码以获取,然后添加单个日志语句以记录和。运行时名称通常映射到进程id和主机名
FileHandler尽其所能防止两个并发运行的JVM写入同一个日志文件。如果允许这种行为,日志文件几乎无法读取和理解
如果确实要将所有内容写入一个日志文件,则必须执行以下操作之一:
很抱歉反应太晚。我不得不继续这个项目,直到现在才有时间重新考虑这个问题。不管怎样,你似乎是对的。我有多个jar实例同时运行。然后,当他们试图访问日志时,它被锁定,并写入.0、.1等。我考虑使用文件锁(java.nio.channels)。但是,我似乎无法让它与日志文件一起工作。我更新了答案,有什么想法吗。如果您需要并发JVM,那么代理处理程序就是最好的选择。如果需要,我可以提供一些示例代码。