【发布时间】:2017-12-02 07:03:16
【问题描述】:
问题
如何在 Java/Scala 中解析非结构化的 Log4J 日志。
背景
关于如何解析 Log4J 日志有很多问题,但他们大多建议使用 XML 或 JSON appender 来输出结构化输出以进行解析。但是需要以编程方式解析已经生成的非结构化日志文件,而不是使用诸如 logstash、chainsaws GUI 之类的工具。
Help with LogFilePatternReceiver 显示了方法,但它需要“插件”支持,这应该在 Log4J 1.3 中实现,但 Log4J 1.x 在 1.2.x 中停止。看起来 Log4J 2 没有 LogFilePatternReceiver。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration >
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.SimpleLayout"/>
<filter class="org.apache.log4j.filter.ExpressionFilter">
<param name="Expression" value="msg ~= 'SPECIFY CASE-INSENSITIVE MSG MATCH HERE'" />
<param name="AcceptOnMatch" value="true"/>
</filter>
<filter class="org.apache.log4j.filter.DenyAllFilter"/>
</appender>
<plugin name="LOGFILE" class="org.apache.log4j.varia.LogFilePatternReceiver">
<param name="fileURL" value="file:///c:/some.log"/>
<param name="timestampFormat" value="yyyy-MM-dd HH:mm:ss,SSS"/>
<param name="logFormat" value="TIMESTAMP LEVEL [LOGGER] MESSAGE"/>
<param name="name" value="my log file"/>
<param name="tailing" value="true"/>
</plugin>
<root>
<level value="DEBUG"/>
<appender-ref ref="CONSOLE"/>
</root>
</log4j:configuration>
org.apache.log4j.lf5.util.LogFileParse 包中有一个类LogFileParser,但不知道如何使用它。有一个工具OtrosLogViewer,但如果可能的话,最好不要有第 3 方依赖项。
选项
Re: Extract log info from each output log line on the console 建议参考电锯代码。阅读代码并实现类似的选项是一种选择,但如果已经有一种已知的解析日志的方法,想先了解它。
参考文献
【问题讨论】: