簡體   English   中英

LOG4J 在日志行中添加一些前綴以指示日志被截斷

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM