java - 清除日志文件后 Logback 停止记录

标签 java linux logging logback

当我处于开发模式时,我通常会清除日志文件,我需要重新开始,只关注我必须测试的事情。

如果我在 linux 中清除一个日志文件(没有测试过 Windows),logback 会停止写入该文件 也许它与 Linux 中的打开处理程序和文件描述符有关。

如何在不重新启动应用程序的情况下恢复这种情况? 有没有可能有一个appender可以自动恢复这种情况?

最佳答案

当您的应用程序正在运行时(并且您的应用程序中的 Logback 有一个打开的日志文件句柄)...

  • 您将无法在 Windows 上删除该文件
  • 您将能够在 Linux 上删除该文件,但就 Logback 而言,该文件仍然存在,直到 Logback 关闭该打开的文件句柄。因此,Logback 不会知道文件已被删除,但由于文件已被删除 Logback 实际上无法将任何内容写入磁盘,这种情况一直持续到 Logback 重新初始化(并且您的 FileAppender 重新创建文件)。通常,这将在应用程序启动时完成。

有一个 open issue反对 Logback 在这种情况下请求更改 Logback 的行为。

如果你的目标是让日志输出只关注最近的 Activity ,那么你可以定义一个最小大小的滚动文件附加程序,没有历史记录,只是为了保留(例如)最后 1MB 的数据,这可能帮助提供一些对最近发生的事件的关注。

或者,您必须:

  • 投票给this issue
  • 使用 grep/awk 查找日志文件的相关方面(您可以轻松地根据时间戳进行 grep),即使它们位于包含最近几个小时的日志事件的日志文件中也是如此
  • 通过编写一个简单的脚本来减轻在这种情况下重新启动应用程序的负担,该脚本执行以下操作:(1) 停止应用程序; (2) 删除日志文件; (3) 开始申请

关于java - 清除日志文件后 Logback 停止记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46592679/

相关文章:

java - IntelliJ - 模块 xx 是从 Maven 导入的。重新导入后对其配置所做的任何更改都可能丢失意味着什么?

java - 如何禁用 mongoDB java 驱动程序日志记录?

java - 在 Java2D 中移动多个 BufferedImage?

linux - 如何使用 sed 在 mac 上更改行 (Darwin)

linux - 如何将对话框的背景颜色更改为黑色

javascript - 无法在 Ubuntu 上打开 VS Code

java - 如果编译器可以内联日志调用,为什么还要在日志 API 中使用 lambda 表达式

jetty记录器错误: org. eclipse.jetty.util.log.Log.getLogger

Java, eclipse : Finding Files ending in a certain pattern/extension/whatever

java - 添加 View 导致 "Child already has parent"错误