【问题标题】:How to update modified date and time with log4j in Java?如何在 Java 中使用 log4j 更新修改的日期和时间?
【发布时间】:2019-05-14 18:10:58
【问题描述】:

我的 Java 程序每 5 分钟循环运行一次。

我正在使用 log4j 进行日志记录。在日志文件中写入新行时,即使我关闭并重新打开程序,文件的修改日期和时间也不会更新。仅当您使用其他程序(例如 Visual Studio Code)打开日志文件时,才会更新修改的日期和时间。

在 Java 类的开头,我像这样初始化记录器:

private final Logger log = Logger.getLogger (getClass().getName());

有没有办法在每次循环迭代时更新日志文件的修改日期和时间?

环境:Windows 10

【问题讨论】:

  • 这是Windows的问题,文件更新时资源管理器窗口不刷新。这不是编程问题,也不是 Java 问题。这就是 Windows 的工作方式。您是否尝试按 F5 刷新资源管理器窗口?
  • 转到文件所在的文件夹,在 Windows 资源管理器中,右键单击并点击“刷新”。文件的最后更新日期应更改。
  • 谢谢安德烈亚斯。是的,但是同样的问题日期和时间没有更新..这是一个大问题,因为我使用 opmanager 查看是否已写入或修改日志,但没有更新修改日期和时间 opmanager 会触发警报。

标签: java log4j


【解决方案1】:

这更像是一个概念性的答案,而不是一个实际的解决方案,但我会为未来的观众尝试一下,因为我遇到了相关问题。

更新文件Last Modified属性的规则取决于操作和文件系统。我找不到官方知识库,但这里是someone who actually tested it on Windows 10

底线是您不能信任 Date Modified 指定已对文件进行的内容更改。

由于我的目标是监视(通过指定的应用程序).log 文件以查看我的服务是否已关闭,我最终实际上检查了代码最后一行的第一个标记(其中包含日期和时间) .这个问题的另一个解决方案是使用DailyRollingFileAppender,它会每天滚动一个新文件。

如果您仍想依赖Date Modified,则必须手动touch 文件。 Here's how to get the actual file from your Logger,那么你可以使用java.io.File.setLastModified()

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    相关资源
    最近更新 更多