我有一个从另一个脚本每分钟调用一次的jar。在这个jar中,我创建了一个JavaLogger来记录Jar运行时发生的情况。 JavaLogger写入的日志文件称为myLog.0。我有下面的代码允许它去.1/.2/.3/.4。JavaLogger随机写入第二个文件
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退出之前关闭处理程序。只有一个从罐出口点,我把下面的代码之前正确的:
MyLogger.logger.getHandlers()[0].close();
我已经通过调试运行这个并没有永远只一个处理程序(我加的FileHandler)。
正如我所说的,这只是随机发生的。罐子的前3次运行可以是.0,然后是第四次运行到.0.1。然后下一个10可能再次正确。这很难说。然而它确实发生得相当频繁(我会说它大约每1/8次写入.0.1)。
任何想法/建议将是伟大的。提前致谢。
对不起,迟到的回应。我不得不继续这个项目,直到现在没有时间重新讨论这个问题。无论如何,你对此似乎是正确的。 我有一次运行的jar的多个实例。然后,当他们尝试访问日志时,它将被锁定并写入.0,.1等。 我考虑过使用文件锁(java.nio.channels)。不过,我似乎无法让它与日志文件一起工作。关于我应该从哪里出发的任何想法? –
我更新了答案。如果你需要并发的JVM,那么代理处理程序就是要走的路。如果您需要,我可以包含一些示例代码。 – jmehrens