我正在使用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);
}
}
使用patternlayout:
<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}
突出显示也不会在日食和Kibana(ELK环境)中工作。
有人可以帮忙吗?
答案 0 :(得分:0)
可能是%xEx PatternLayout转换器在其选项中不支持属性替换吗?
如果您将要过滤的包直接放在过滤器列表中,该怎么办?
为此可能值得在Log4j 2问题跟踪器上提高Jira票。
答案 1 :(得分: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}"/>