【问题标题】:Enable Logging Log4j for certain users为某些用户启用 Log4j
【发布时间】:2009-05-21 12:52:41
【问题描述】:

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

【问题讨论】:

    标签: java logging log4j


    【解决方案1】:

    我假设您有一个 Web 应用程序或类似的应用程序,并且有多个可识别的用户同时访问它?

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

    1. 在发起服务器调用后立即识别用户。将该用户数据存储在MDC
    2. 实现自定义 Log4J appender。对于每个来电,您可以检查存储在 MDC 中的用户,并根据需要调整严重性/日志记录。

    这有点工作(鉴于上述假设),但应该工作。如果我对您的架构所做的假设不正确,显然它是无效的。

    【讨论】:

    • 不要创建自定义附加程序。每种附加器都有一个新类型。相反,创建一个可以与任何附加程序组合的过滤器。
    • 我模糊地设想了一个自定义附加器,该附加器委托给更多附加器集。但在这种情况下,过滤器看起来是一个非常合适的解决方案。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      是的,但是。

      您可以使您的记录器以所涉及的类+用户命名,而不仅仅是类,并在方法上创建记录器(或者如果您想获得花哨,将记录器缓存在由用户键入的某种池中),然后适当地配置日志记录。

      这对代码来说非常混乱和侵入性,但由于用户是运行时属性,我不知道如何(缺少 AspectJ 或其表亲)如何避免这种混乱。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-11
        • 1970-01-01
        • 2017-04-07
        • 1970-01-01
        • 2015-07-26
        • 1970-01-01
        相关资源
        最近更新 更多