3

我正在使用带有这两个依赖项的 log4j2:

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.6.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-1.2-api</artifactId>
        <version>2.6.2</version>
    </dependency>

例如,当我尝试使用 throwable 记录错误时,例如:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.testng.annotations.Test;

public class Test {

private static final Logger logger = LogManager.getLogger(Test.class);

@Test
public void testSendMessage() throws Exception {
    Exception exception = new Exception("some exception");
    logger.error("error with exception", exception);
}
}

使用模式布局:

<Configuration>
<properties>
    <property name="filters">org.testng,org.apache.maven,sun.reflect,java.lang.reflect</property>
</properties>

<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT" direct="true">
            <PatternLayout pattern="%maxLen{%d{DEFAULT} [%p]  %c{-3}:%L - %enc{%m} %xEx{filters(${filters})}%n}{200}"/>
        </Console>
</Appenders>

<Loggers>
    <logger name="my.test.class.path" level="trace" additivity="false">
        <AppenderRef ref="ConsoleAppender" />
    </logger>
</Loggers>
</Configuration>

然后过滤的包不会从堆栈跟踪中消失,我什至不能以任何方式操作堆栈跟踪,比如最大化行:

%xEx{5}

突出显示在 Eclipse 和 Kibana(ELK 环境)中也不起作用。

有人可以帮忙吗?

4

2 回答 2

1

难道 %xEx PatternLayout 转换器不支持其选项中的属性替换?

如果您将要过滤的包直接放在过滤器列表中怎么办?

为此,可能值得在 Log4j 2 问题跟踪器上提出 Jira 票。

于 2016-09-28T11:59:50.913 回答
0

尝试删除结尾{200}。我认为使用更多子参数存在问题。

这是一个有效的片段。请注意,如果您添加诸如分隔符(|)之类的其他内容,它将停止工作[在 2.8.1 和 2.9.1 版本中测试]

<Properties>
   <Property name="exfilters">org.jboss,java.lang.reflect,sun.reflect</Property>
   <Property name="log-pattern">%d %-5p %m%n%xEx{filters(${exfilters})}/Property>
</Properties>
...
<PatternLayout pattern="${sys:log-pattern}"/>
于 2018-11-13T22:02:40.317 回答