我有一个基于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-2c2e74c17f2d或https://facingissuesonit.com/log4j2-how-to-mask-logs-personal-confidential-spi-information/。
我不能更改日志库,因为它可能会影响当前的日志记录。
1条答案
按热度按时间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
文件,其内容为: