Log4j.xml %replace usage in layout,PatternLayout tags

问题描述 投票:0回答:1

我一直在尝试屏蔽(替换)日志中的某些字符串,尝试升级 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 的正确语法? 任何帮助将不胜感激,提前致谢..

replace log4j log4j2
1个回答
0
投票

虽然类路径上有 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>
© www.soinside.com 2019 - 2024. All rights reserved.