【问题标题】:Dynamic monitoring of log file动态监控日志文件
【发布时间】:2011-11-29 23:26:41
【问题描述】:

我需要监控日志文件中的某个模式。日志文件不断被应用程序写入。

  1. 应用程序可以在我的程序读取时添加新的日志语句。
  2. 日志在大于 200 MB 或一天结束时会翻转,因此我的程序应该动态处理文件名的更改。
  3. 如果我的程序因任何原因崩溃,它必须从中断处恢复。

我不想重新发明轮子。我正在寻找 Java API。我编写了一个程序来读取文件并在 30 秒的睡眠中放入一个循环,但这并不符合所有条件。

【问题讨论】:

标签: java logging


【解决方案1】:

您可能会考虑查看 apache commons io 类,特别是 Tailer/TailerListener 类。见http://www.devdaily.com/java/jwarehouse/commons-io-2.0/src/main/java/org/apache/commons/io/input/Tailer.java.shtml

【讨论】:

    【解决方案2】:

    这两个 API 会很有帮助:

    1

    JxFileWatcher (Official Site)

    Read here what it is capable of


    2

    Jnotify

    JNotify 是一个 java 库,允许 java 应用程序监听文件系统事件,例如:

    • 文件已创建

    • 文件已修改

    • 文件重命名

    • 文件已删除

    【讨论】:

      【解决方案3】:

      如果您正在使用Log4j,或者可以集成它,则可以将日志输出附加到一个方便的对象,例如StringBuffer,正如在这个相关问题中所讨论的那样:Custom logging to gather messages at runtime

      【讨论】:

      • 我确实从 log4j 中查看了 socketAppender,最初它导致我的日志生成器显着减慢。接下来是将日志生产者包装在 AsyncAppender 中。这确实释放了 Producer,但我会间歇性地看到“EOF 套接字关闭”。我的测试用例将在 5 分钟窗口内生成 100 万个事件以进行性能测试。
      【解决方案4】:

      这看起来很相似:Implementation of Java Tail

      基本上你使用的是 BufferedReader。跟踪您离开的地方将是您必须添加的内容,也许捕获最后一行读取?

      同样的问题引用了JLogTailer,它看起来很有趣,并且可能已经完成了您想要的大部分工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-30
        • 1970-01-01
        • 1970-01-01
        • 2017-07-12
        • 2016-01-11
        • 1970-01-01
        • 2016-10-06
        • 1970-01-01
        相关资源
        最近更新 更多