Storm 控制Java中依赖项所做的日志记录

4dc9hkyq  于 9个月前  发布在  Apache
关注(0)|答案(1)|浏览(102)

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

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

还有一个库依赖项(我们称之为A),它也固有地调用jersey客户端。
问题说明:我能够控制我的应用程序所做的日志记录,例如屏蔽敏感令牌。但是,在log4j2.xml中完成的屏蔽设置不会应用于A进行的调用,并且敏感信息会打印在日志中。
在调试时,它被jersey-common-2.29.jar中的LoggingFeature类打印出来。例如:

  • org.glassfish.jersey.logging.LoggingInterceptor log INFO:1 * 正在线程上发送客户端请求... *

如何屏蔽此库所做调用打印的标记。
完整的流程是:
我调用库A的实用程序函数(传递令牌和其他信息作为参数)->库A进行http调用->令牌被打印。
我尝试了多种屏蔽技术,如这里所描述的:https://alesaudate.medium.com/masking-sensitive-data-in-log4j-2-the-simplest-way-possible-2c2e74c17f2dhttps://facingissuesonit.com/log4j2-how-to-mask-logs-personal-confidential-spi-information/
我不能更改日志库,因为它可能会影响当前的日志记录。

vzgqcmou

vzgqcmou1#

Log4j Core只有在库实际使用它作为日志后端时才能屏蔽消息。
Jersey使用java.util.logging作为日志API(参见source code),这是最难重定向到非标准日志后端的。
为此,您需要在任何日志记录开始之前将java.util.logging.manager Java系统属性设置为不同的LogManager,这通常意味着在命令行上。
要在Apache Storm发行版中执行此操作,您需要:

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

相关问题