我使用 log4j2 FileAppender 创建了日志文件。在不重新创建自己的解析器的情况下,我试图找到一种方法来使用 log4j2 已有的内容,以便将日志文件中的行重新编码回 LogEvents。
这是 log4j2.xml 中的 FileAppender
<File name="FileAppender" fileName="Logs/urchat-${date:yyyyMMdd}.log" immediateFlush="true" append="true">
<NoMarkerFilter onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS}{UTC}UTC [%t] %-5level %logger{36} - %msg%n"/>
</File>
我研究过使用 PatternParser,这似乎是正确的方法。我只是不确定从那里去哪里。我可以退回到手动使用分隔符 (%) 并拆分行并这样做,这似乎不是最好的方法。
PatternParser
可能不是您正在寻找的类:它解析的不是日志文件,而是转换模式字符串,例如:
%d{yyy-MM-dd HH:mm:ss.SSS}{UTC}UTC [%t] %-5level %logger{36} - %msg%n
解析由
PatterLayout
生成的日志文件的最大问题是它是非结构化:您无法确定日志事件的开始位置和结束位置。
除了
%d
模式之外,其他模式 %t
、%level
、%logger
、%msg
和隐式 %xEx
可以生成任何类型的文本,包括换行符和日期。因此,您可以确定新日志事件的开始位置(新行上的日期),但无法确定它的结束位置。
为了能够以确定性的方式解析日志,您需要以结构化格式编写日志,例如RFC 5424、XML或JSON。