使用log4j 2,我想替换日志消息中的一些字符串(比如将***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)
...
如何在属性文件和log4j 2中表示***replace***,是否可以将xml配置中的所有内容都转换为属性配置?我使用的是log4j-api-2.14.0.jar和log4j-core-2.14.0.jar。
提前感谢!
EDIT:我以前也尝试过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配置,我可以得到正确的结果,但我不知道如何将其转换为属性配置。
1条答案
按热度按时间8cdiaqws1#
对于正则表达式替换,请使用
replace{pattern}{regex}{substitution}
模式。必须删除appender.A1.layout.replace.*
。更多信息
Log4j2 - Layouts
替换{模式}{正则表达式}{替换}
在模式评估产生的字串中,将出现的正则表达式'regex'取代为它的取代'substitution'。例如,“%replace{%msg}{\s}{}”会移除事件消息中包含的所有空格。
模式可以是任意复杂的,特别是可以包含多个转换关键字。例如,“%replace{%logger %msg}{.}{/}”将用正斜杠替换记录器或事件消息中的所有点。