【发布时间】:2021-04-24 23:54:24
【问题描述】:
使用 log4j2,我想替换日志消息中的一些字符串(比如将 foo 替换为 bar) .在xml配置中,我可以使用下面的配置,它可以工作。
<Appenders>
<Console name="A1" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss}] %m%n">
<replace regex = "foo" replacement="bar"/>
</PatternLayout>
</Console>
</Appenders>
但是使用 XML,我必须在我的项目中使用属性文件,所以我尝试了类似的东西
appender.A1.type = Console
appender.A1.name = A1
appender.A1.layout.type = PatternLayout
appender.A1.layout.pattern = [%d{HH:mm:ss}] %m%n
# Probably BAD code begin
appender.A1.layout.replace.regex = foo
appender.A1.layout.replace.replacement = bar
# Probably BAD code end
我得到如下错误:
Exception in thread "main" org.apache.logging.log4j.core.config.ConfigurationException: No type attribute provided for component replace
at org.apache.logging.log4j.core.config.properties.PropertiesConfigurationBuilder.createComponent(PropertiesConfigurationBuilder.java:334)
...
如何在属性文件和 log4j2 中表示 replace,是否可以将 xml 配置中的所有内容转换为属性配置? 我正在使用 log4j-api-2.14.0.jar 和 log4j-core-2.14.0.jar。
提前谢谢!
编辑:
我之前也试过replace{pattern}{regex}{substitution}。而且我认为这与 replace 参数不同。
说模式是
appender.A1.layout.pattern = [%d{HH:mm:ss}][%C::%M] %replace{%m}{foo}{bar}%n
我会得到
[09:28:07][com.foo.MyApp::main] 111 bar 222
但我想得到的是
[09:28:07][com.bar.MyApp::main] 111 bar 222
使用上面的XML配置,我可以得到正确的结果,但我不知道如何将其转换为属性配置。
【问题讨论】: