我一直试图屏蔽(替换)日志中的某些字符串,尝试升级log4j并使用%replace,但无法替换文本。以下是最初在我的log4j.xml中的代码(更改前)
<layout class="org.apache.log4j.PatternLayout"> -->
<!-- The log message pattern -->
<param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %m%n" />
</layout>
变更如下:
<layout class="org.apache.log4j.PatternLayout"> -->
<!-- The log message pattern -->
<param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %replace{%m%n}{<Name1>(?:.+?)</Name1>}{<Name1>*****</Name1>}" />
</layout>
还尝试了以下操作:
<PatternLayout>
<Pattern>%replace{%5p %d{ISO8601} [%t][%x] %c - %m%n}{<Name1>(?:.+?)</Name1>}{<Name1>*****</Name1>}</Pattern>
</PatternLayout>
我的依赖关系如下:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.20.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>2.0.0-alpha5</version>
<exclusions>
<exclusion>
<groupId>log4jversion1</groupId> <!-- Exclude Project-E from Project-B -->
<artifactId>log4j-core</artifactId>
</exclusion>
</exclusions>
</dependency>
但它不是打印日志后,我的变化...我写正确的语法%替换在正确的地方?任何帮助将不胜感激,提前感谢..
1条答案
按热度按时间ql3eal8s1#
虽然在类路径上有Log4j 2.x Core,但也使用SLF4J到Log4j 1.x绑定(
slf4j-log4j12
),它将Log4j 1.x作为传递依赖项。在这样的配置下,SLF4J将使用Log4j 1.x,而Log4j 2.x API将使用Log4j 2.x Core。
要将所有内容重定向到Log4j 2.x Core,请像这样更改依赖项:
您还需要将
log4j.xml
文件转换为log4j2.xml
文件,因为2.x版本使用不同的语法(参见文档)。阵列布局定义如下所示:
或者,如果您更喜欢在整个日志记录事件上运行regex: