我正在处理的应用程序提供基于当前用户的日志记录。为了实现这一点,我使用log4j AbstractFilter
来检查当前用户是否有自定义日志级别,并返回Log.isDebugEnabled()
等方法的相应结果。
我的应用程序使用的一些第三方库使用java.util.logging
。我希望这些日志与我自己的日志记录相同。但是java.util.logging.Logger.isLoggable()
方法返回的结果与我自己的日志记录不同。有没有办法用我自己的逻辑覆盖这个功能?
编辑:我在我的应用程序中使用slf4j
与log4j2
作为底层日志框架。我试图使用jazxswpoi描述的java.util.logging~> slf4j桥,但它似乎只影响here函数本身,而不是Log
。
在java.util.logging中,您可以通过实现isLoggable()
并设置适当的isLoggable
来修改 java.util.logging.Filter行为。
从level的源代码看来,publish方法不是在处理程序上调用SLF4JBridgeHandler。因此,您不能简单地将java.util.logging.Filter安装到SLF4JBridgeHandler。
一种选择是将SLF4JBridgeHandler包装在代理处理程序中,例如isLoggable。这可以在logging.properties文件中或通过代码设置:
MemoryHandler
另一种选择是在所有记录器上安装log4过滤器。如果所有记录器都基于类名而不是子系统,那么这可能是很多工作。