繁体   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