当前位置: 首页 > 知识库问答 >
问题:

Log4j2:如何在log4j2.properties文件中使用替换参数

呼延曜灿
2023-03-14

使用log4j2,我想替换日志消息中的一些字符串(比如用bar替换foo)。在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。罐子

谢谢提前!

编辑:我以前也尝试过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个答案

姜羽
2023-03-14

对于正则表达式替换,请使用replace{pattern}{regex}{substitution}pattern<代码>追加器。A1。布局替换* 必须删除。

appender.A1.type = Console
appender.A1.name = A1
appender.A1.layout.type = PatternLayout
appender.A1.layout.pattern = [%d{HH:mm:ss}] %replace{%m}{foo}{bar}%n

# whole line
appender.A1.layout.pattern = %replace{[%d{HH:mm:ss}] %m%n}{foo}{bar}

Log4j2-布局

替换{pattern}{regex}{substitution}

将正则表达式regex的出现替换为模式求值产生的字符串中的替换。例如,“%替换{%msg}{\s}{}”将删除事件消息中包含的所有空格。

模式可以是任意复杂的,尤其可以包含多个转换关键字。例如,“%replace{%logger%msg}{.}”{/}“将用正斜杠替换记录器或事件消息中的所有点。

 类似资料:
  • 如何在propterties文件中的log4j2中创建keyvaluepair? 我知道在log4j Version1中是这样做的: ?

  • 如果我在application.properties文件中指定“Logging.config=src/main/resources/log4j2.properties”,日志记录就可以正常工作。 spring boot自动检测log4j2.properties而不需要在application.properties文件中指定“logging.config=src/main/resources/log

  • 我想使用新的log4j2-Java日志框架。一切正常,但我从一小时后就尝试加载一个自定义配置文件来配置日志记录(如日志级别)。 这是我的log4j2.xml: 我尝试了以下方法,但没有任何效果: 移动log4j2.xml文件,使其位于默认包中。 将log4j2.xml文件移动到项目中的任意位置 将log4j2.xml文件命名为log4j.xml 在项目中创建一个文件夹,将log4j2.xml文件放

  • 我是春靴的新手。我有一个跑步Spring靴项目。我想使用log4j2(由于项目限制,我必须使用log4j2本身)将不同级别的所有日志重定向到一个名为'test.log'的日志文件。 ---我的测试API的控制器也有以下测试日志行: ---在我的理解中,我已经在代码中包含了所有必需的内容。但是我面临着这个问题--当我使用API时,只有hibernate调试记录器被添加到test.log中;我在con

  • 我正在尝试用log4j2日志功能配置Spring(非引导)MVC项目。目前我已经放置了所有文件位于不在类路径中的位置。我使用了注释来进行此配置。我收到下面的消息 错误状态记录器未找到Log4j 2配置文件 使用默认配置(仅将错误记录到控制台)或用户以编程方式提供的配置 设置系统属性“log4j2”。“调试”以显示Log4j 2内部初始化日志 见https://logging.apache.org/

  • 1)我想每天使用log4j2.xml.生成日志文件,我使用RollingFile appender标记来实现同样的功能。但是,它将日志附加在同一文件上。 2)下面是我们在log4j.xml中使用的类别标签,我想知道在log4j2.xml中类别标签的等价物是什么? 3) 如何使用log4j2中的所有属性定义snmptrappender?