【发布时间】:2011-11-29 23:26:41
【问题描述】:
我需要监控日志文件中的某个模式。日志文件不断被应用程序写入。
- 应用程序可以在我的程序读取时添加新的日志语句。
- 日志在大于 200 MB 或一天结束时会翻转,因此我的程序应该动态处理文件名的更改。
- 如果我的程序因任何原因崩溃,它必须从中断处恢复。
我不想重新发明轮子。我正在寻找 Java API。我编写了一个程序来读取文件并在 30 秒的睡眠中放入一个循环,但这并不符合所有条件。
【问题讨论】:
我需要监控日志文件中的某个模式。日志文件不断被应用程序写入。
我不想重新发明轮子。我正在寻找 Java API。我编写了一个程序来读取文件并在 30 秒的睡眠中放入一个循环,但这并不符合所有条件。
【问题讨论】:
您可能会考虑查看 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。
【讨论】:
这两个 API 会很有帮助:
Read here what it is capable of
JNotify 是一个 java 库,允许 java 应用程序监听文件系统事件,例如:
文件已创建
文件已修改
文件重命名
文件已删除
【讨论】:
如果您正在使用Log4j,或者可以集成它,则可以将日志输出附加到一个方便的对象,例如StringBuffer,正如在这个相关问题中所讨论的那样:Custom logging to gather messages at runtime
【讨论】:
这看起来很相似:Implementation of Java Tail
基本上你使用的是 BufferedReader。跟踪您离开的地方将是您必须添加的内容,也许捕获最后一行读取?
同样的问题引用了JLogTailer,它看起来很有趣,并且可能已经完成了您想要的大部分工作。
【讨论】: