为某些用户启用Logging Log4j

时间:2009-05-21 12:52:41

标签: java logging log4j

在log4j.properties文件中,我将Level设置为ERROR。对于某些用户,我需要将Level设置为DEBUG。我能够在运行时更改日志记录级别,但这将同时为访问该应用程序的所有用户启用。 是否有其他方法可以为选定用户启用日志记录?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

我认为你有一个网络应用程序或类似的,以及多个可识别的用户同时访问它?

您无法轻松更改Log4j中每个用户的配置。但是,我会考虑以下(这假设一个Web服务器或类似的,每个用户请求都在一个单独的线程上):

  1. 识别用户拨打电话后立即拨打电话。将该用户数据存储在MDC
  2. 实施自定义Log4J appender。对于每个来电,您可以检查存储在MDC中的用户,并根据需要调整严重性/日志记录。
  3. 这是一些工作(考虑到上述假设),但应该有效。显然,如果我对你的架构做出的假设不正确,那就无效了。

答案 1 :(得分:1)

使用TurboFilters在logback(log4j的后继者)中解决了这个问题。请参阅标题为“MDCFilter和MarkerFilter配置”的示例。如果您需要进一步的帮助,请联系logback用户邮件列表。

答案 2 :(得分:0)

是的,但是。

你可以让你的记录器以类+用户的名字命名,而不仅仅是类,并在方法上创建记录器(或者如果你想得到花哨的,用户键入某种池的缓存记录器),然后适当地配置日志记录。

它对代码非常混乱和干扰,但由于用户是运行时属性,我不知道(缺少AspectJ或它的表兄弟)如何避免这种混乱。

另一种选择是专门格式化日志消息并在日志消息中包含用户名,然后再解析日志。这样可以为每个人调试(显然这可能是性能问题),但如果关注的是更多关于隔离用户日志而不是限制调试调用的数量,那么这可能是一个解决方案。