覆盖第三方库使用的java.util.logging.Logger.isLoggable()?

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

我正在处理的应用程序提供基于当前用户的日志记录。为了实现这一点,我使用log4j AbstractFilter来检查当前用户是否有自定义日志级别,并返回Log.isDebugEnabled()等方法的相应结果。

我的应用程序使用的一些第三方库使用java.util.logging。我希望这些日志与我自己的日志记录相同。但是java.util.logging.Logger.isLoggable()方法返回的结果与我自己的日志记录不同。有没有办法用我自己的逻辑覆盖这个功能?

编辑:我在我的应用程序中使用slf4jlog4j2作为底层日志框架。我试图使用jazxswpoi描述的java.util.logging~> slf4j桥,但它似乎只影响here函数本身,而不是Log

logging log4j log4j2 slf4j java.util.logging
1个回答
0
投票

在java.util.logging中,您可以通过实现isLoggable()并设置适当的isLoggable来修改 java.util.logging.Filter行为。

level的源代码看来,publish方法不是在处理程序上调用SLF4JBridgeHandler。因此,您不能简单地将java.util.logging.Filter安装到SLF4JBridgeHandler。

一种选择是将SLF4JBridgeHandler包装在代理处理程序中,例如isLoggable。这可以在logging.properties文件中或通过代码设置:

MemoryHandler

另一种选择是在所有记录器上安装log4过滤器。如果所有记录器都基于类名而不是子系统,那么这可能是很多工作。

© www.soinside.com 2019 - 2024. All rights reserved.