【问题标题】:Dynamically changing log4net level based on request information根据请求信息动态改变 log4net 级别
【发布时间】:2012-06-06 03:36:08
【问题描述】:

我有一个 MVC3 网络应用程序。我使用 Ninject 2 进行依赖注入,使用带有 log4net 的 Ninject 日志扩展进行日志记录。
我的客户希望能够“跟踪”生产中的用户会话以解决可能出现的问题。我们想要实现它的方式是通过动态更改该用户的日志级别,例如通过存储一个 cookie,以便当 Ninject.logging 提供记录器实例时,它知道提供一个级别设置为调试的日志实例。
通过使用 Ninject 日志记录或普通 log4net,我没有找到任何方法。
有什么建议吗?

【问题讨论】:

    标签: asp.net-mvc-3 log4net ninject


    【解决方案1】:

    我认为您可以按照in this other question 的描述以编程方式强制关卡。它不完全是提供一个新的 logegr 实例,而是改变当前的,但我想它可以解决你的问题。

    【讨论】:

    • 这是答案的一部分,我需要更改日志级别。问题是,如果我这样做,它将为系统中的所有后续请求而更改。我想要的是一种仅针对会话中带有 cookie 或参数或其他内容的请求更改级别的方法。
    • 使用 LogManager.GetLogger() 创建一个新日志,并使其附加到与原始日志相同的附加程序中...
    【解决方案2】:

    我们最终以这种方式修改了 ninject.extension.logging:
    - 在 LoggerFactoryBase 中,我们修改了 GetLogger(IContext context) 方法以从 HttpContext
    中检索 cookie - 如果设置了此值,我们将使用“Tracing”获取或创建记录器。 + 类型名称
    - 在 log4net 配置中,我们有一个名为“Tracing”的记录器设置为调试

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-28
      • 2020-09-17
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      相关资源
      最近更新 更多