是否有日志解析器Java库?

时间:2018-03-14 08:41:19

标签: java parsing templates logging

我收到了一堆日志,每个日志都有以下格式:

10-20-2016 13:57:28 [main] ERROR com.project.Main:11 - Error message here

此日志的模板是:

<date> <time> <method> <log_level> <class>:<line_no> - <message>

我想解析该日志并创建一个Java对象,其字段与该模板上的每个标记相匹配。

我知道我可以手动执行此操作,使用字符串标记符,但我想首先知道是否有一些解析库已经解决了这个问题(可能比我做的要好得多)。

我正在寻找支持这种模板的东西:如果我更改模板,解析器应该只提取与模板匹配的字段。

谢天谢地。

3 个答案:

答案 0 :(得分:1)

简短的回答是否定的。

没有您实际描述的所有属性。每个日志记录框架(log4j,logback,JUL都是大3)具有不同的配置语义,因此任何解决方案都将特定于后端。

它们中的大多数都有某种LogEvent对象或者你想要的形式存在的东西,因为它在文件结束之前通过管道传递。

找出你正在使用哪个记录后端,只需添加一个将该事物序列化为ObjectOputStream的追加器,然后在闲暇时阅读它。

答案 1 :(得分:1)

你完全在这里咆哮错误的树。我们的想法是安装一个处理程序,根据您正在使用的日志记录API接收数据,并根据您的需要处理该数据。解析记录器输出迟早会注定失败。

答案 2 :(得分:0)

在很多情况下起作用的只是确保日志以结构化格式发送。

如果它们来自外部,则可以将它们传递给fluentd,并保留大部分可用结构。如果您使用的是Logback或log4j,则可以使用诸如logback-more-appenders

之类的库来提供帮助。

尽管这不能解决所有情况,但有时甚至结构化日志仍然具有可以使用某些解析来提取值的消息。在这种情况下,您需要编写自定义解析器...或使用专用的解决方案,该解决方案将尽最大努力找出什么是日志模式并提取参数:https://www.logsense.com/blog/integrating-java-logs-with-logsense(免责声明,我正在研究中)< / p>