重新编码/解析由log4j2创建的日志,返回LogEvents

问题描述 投票:0回答:1

我使用 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,这似乎是正确的方法。我只是不确定从那里去哪里。我可以退回到手动使用分隔符 (%) 并拆分行并这样做,这似乎不是最好的方法。

java logging log4j log4j2
1个回答
0
投票

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。

© www.soinside.com 2019 - 2024. All rights reserved.