[英]LOG4J add some prefix in the log line to indicate the log is truncated
由於空間限制,我將使用模式布局截斷所有日志行
<pattern>%d{dd MMM yyyy HH:mm:ss,SSS} [%level{WARN=W, DEBUG=D, ERROR=E, TRACE=T, INFO=I}] %X{RequestId} (%t) %c{2}: %.-10m%n%ex</pattern>
但是,有時查看一行日志是否被截斷會令人困惑,並且不方便調試。 是否可以為被截斷的日志行添加前綴?
例如:
原文: log more than ten chars
之前: log more t
之后: truncated-log more than t
是的,這可以通過使用ScriptPatternSelector
來完成,如PatternLayout下的 log4j2 手冊中所述。 您可以將選擇器設置為根據格式化消息字符串的長度來選擇模式。 下面是示例代碼來演示。
這是 log4j2.xml 配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="maxMsgLength">10</Property>
<Property name="basePattern">%d{dd MMM yyyy HH:mm:ss,SSS} [%level{WARN=W, DEBUG=D, ERROR=E, TRACE=T, INFO=I}] %X{RequestId} (%t) %c{2}: %.-${maxMsgLength}m%n%ex</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout>
<ScriptPatternSelector>
<Script name="Selector" language="javascript"><![CDATA[
if(logEvent.getMessage().getFormattedMessage().length() > ${maxMsgLength}){
"P1";
}else{
"P2";
}
]]>
</Script>
<PatternMatch key="P1" pattern="Truncated ${basePattern}"/>
<PatternMatch key="P2" pattern="${basePattern}"/>
</ScriptPatternSelector>
</PatternLayout>
</Console>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
這是一個用於生成一些日志消息的 Java 類:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class SomeClass {
private static final Logger log = LogManager.getLogger();
public static void main(String[] args){
log.info("Here's a long message!");
log.info("Short msg");
}
}
最后這里是上面的輸出:
Truncated 20 Jul 2021 22:47:34,531 [I] (main) example.SomeClass: Here's a l
20 Jul 2021 22:47:34,641 [I] (main) example.SomeClass: Short msg
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.