我一直在尝试屏蔽(替换)日志中的某些字符串,尝试升级 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>
但是我改后根本不打印日志... 我是否在正确的位置编写了 %replace 的正确语法? 任何帮助将不胜感激,提前致谢..
虽然类路径上有 Log4j 2.x 核心,但您还使用 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,请像这样更改您的依赖项:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-bom</artifactId>
<version>2.20.0</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- If your code uses SLF4J: -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.7</version>
</dependency>
<!-- If your code uses Log4j 2.x API -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
<!-- Redirects SLF4J 2.x to Log4j 2.x API: -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Reference implementation of Log4j 2.x API: -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
您还需要convert您的
log4j.xml
文件为log4j2.xml
文件,因为版本2.x使用不同的语法(参见documentation)。
模式布局定义如下所示:
<PatternLayout pattern="%5p %d{ISO8601} [%t][%x] %c - %replace{%m%n}{<Name1>(?:.+?)</Name1>}{<Name1>*****</Name1>}"/>
或者如果您更喜欢在整个日志记录事件上运行正则表达式:
<PatternLayout pattern="%5p %d{ISO8601} [%t][%x] %c - %m%n">
<Replace pattern="<Name1>(?:.+?)</Name1>"
substitution="<Name1>*****</Name1>"/>
</PatternLayout>