控制 Java 中依赖项完成的日志记录

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

我有一个基于 Apache Storm 2.3 的应用程序。该应用程序还具有球衣依赖项,例如

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-common</artifactId>
        <version>2.29</version>
    </dependency>

还有 1 个库依赖项(我们称之为 A),它本身也调用 jersey 客户端。

问题陈述: 我能够控制应用程序完成的日志记录,例如屏蔽敏感令牌。但是,log4j2.xml 中完成的屏蔽设置不会应用于 A 发出的调用,并且敏感信息会打印在日志中。

在调试时,它由 jersey-common-2.29.jar 中的 LoggingFeature 类打印。比如:

  • org.glassfish.jersey.logging.LoggingInterceptor 日志 信息:1 * 在线程上发送客户端请求...*

如何屏蔽该库调用打印的令牌。

完整流程为:

我调用库A的实用函数(传递令牌和其他信息作为参数)->库A进行http调用->令牌被打印。

我尝试了多种屏蔽技术,如下所述: https://alesaudate.medium.com/masking-sensitive-data-in-log4j-2-the-simplest-way-possible-2c2e74c17f2dhttps://faceissuesonit.com/log4j2-how-to-mask -日志-个人机密-spi-信息/

P.S -> 我无法更改日志记录库,因为它可能会影响当前的日志记录。

java logging log4j log4j2 apache-storm
1个回答
0
投票

Log4j Core 仅当库实际使用它作为日志记录后端时才能屏蔽您的消息。

Jersey 使用

java.util.logging
作为日志记录 API(参见 源代码),这是最难重定向到非标准日志记录后端的。

为此,您需要在任何日志记录开始之前(这通常意味着在命令行上)将

java.util.logging.manager
Java 系统属性设置为不同的
LogManager

为了在 Apache Storm 发行版中执行此操作,您需要:

  • log4j-jul
    添加到应用程序类路径(
    lib
    发行版的子文件夹),
  • 在发行版的
    storm-env.sh
    目录中添加一个
    conf
    文件,内容为:
    export JAR_JVM_OPTS="-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager"
    
© www.soinside.com 2019 - 2024. All rights reserved.