- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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.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 运行过程中,这种情况从未发生过。 jar 运行的整个过程中它都会记录到 .0.1。该文件是否仍因我之前的运行而被锁定?
如果是这样,我什至尝试在 Jar 退出之前关闭处理程序。 jar 中只有一个退出点,我将以下代码放在它前面:
MyLogger.logger.getHandlers()[0].close();
我已经通过调试器运行了它,并且只有一个处理程序(我添加的 FileHandler)。
正如我所说,这只是随机发生的。 jar 的前 3 次运行可能是 .0,然后第四次是 .0.1。那么接下来的 10 个可能又是正确的。很难说。然而它确实经常发生(我想说它大约每 1/8 的时间写入 .0.1)。
任何想法/建议都会很棒。提前致谢。
最佳答案
Could the file still be locked from my previous run?
可能有两个 JVM 同时运行您的 jar。添加代码以获取 RuntimeMXBean然后添加一条日志语句来记录 runtime name和 start time 。运行时名称通常映射到进程 ID 和主机名。
FileHandler 会尽一切努力防止两个同时运行的 JVM 写入同一个日志文件。如果允许这种行为,日志文件将几乎无法阅读和理解。
如果您确实想将所有内容写入一个日志文件,那么您必须执行以下操作之一:
关于JavaLogger 随机写入第二个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21045936/
我有一个 jar ,大约每分钟都会从另一个脚本调用一次。在这个 jar 中,我创建了一个 JavaLogger,用于记录 Jar 运行时发生的情况。 JavaLogger 写入的日志文件称为 myLo
我是一名优秀的程序员,十分优秀!