【问题标题】:log4net custom logginglog4net 自定义日志记录
【发布时间】:2010-11-29 18:56:55
【问题描述】:

请有人为这个问题推荐一个更好的标题。我不知道该放什么。

现在我们有一个围绕 ILog 实例的日志包装器,它在记录的消息中添加一些文本。我想做的是实现 ILayout 或 ILogger 或 IAppender,然后可以在我们的配置 XML 中指定它们。我要添加的文本不是静态的。因为它在每个日志条目中都使用,所以我们希望实现一次,而不是在代码中每次生成日志消息。

这有意义吗?我应该实现哪个接口?现在我们使用 PatternLayout。

【问题讨论】:

  • 您查看过 MS 企业库日志记录应用程序块吗?
  • 不,但我们已经使用 log4net 几年了,并且对它很满意。
  • 更多关于您想要添加到每条日志消息的确切信息类型的信息会很有用。您想在配置文件中配置一些“静态”文本吗?您要添加的文本是否在运行时严格确定?您是否有一些示例代码说明您当前如何将文本添加到消息中(可能是 log4net 的调用站点?)

标签: c# .net log4net


【解决方案1】:

这取决于您打算如何重用它(例如,使用多个附加程序时),但由于您要更改日志消息的文本ILayout 听起来是最佳选择。

你可以继承 PatternLayout 并在 Format 中做你的事情。

【讨论】:

    【解决方案2】:

    我同意实现自定义 PatternLayoutConverter。这里有几个例子:

    这个将 System.Diagnostics.Trace.CorrelationManager.ActivityId 添加到输出中:

      public class ActivityIdLayoutConverter : PatternLayoutConverter
      {
        protected override void Convert(System.IO.TextWriter writer, LoggingEvent loggingEvent)
        {
          writer.Write(Trace.CorrelationManager.ActivityId.ToString());
        }
      }
    

    这是参数化的(它可以配置一个键,可用于从字典中检索值 - 类似于 GDC 或 MDC):

      class KeyLookupPatternConverter : PatternLayoutConverter
      {
        protected override void Convert(System.IO.TextWriter writer, LoggingEvent loggingEvent)
        {
          string setting;
          //Option is the key name specified in the config file
          if (SomeDictionaryWithYourValues.TryGetValue(Option, out setting))
          {
            writer.Write(setting);
          }
        }
      }
    

    Here is a link 回答我提出的关于创建可以采用键值的 PatternLayoutConverter 的问题。它展示了如何在 log4net 和 NLog 中执行此操作以及如何配置。

    或者,您可以包装一个 log4net 记录器,并在包装​​器的“Log”方法中,您可以修改输入消息,或者您可以将您的自定义值放入 GlobalDiagnosticContext.Properties 或 ThreadDiagnosticContext.Properties,然后在输出中引用这些值通过普通属性令牌方法。

    【讨论】:

      【解决方案3】:

      您可能希望在您的应用程序上使用依赖注入,您可以更改您以后登录到任何您想要的方式。

      【讨论】:

      • 这有点极端,超出了我们想要的更改范围。实现一个接口并在 log4net.xml 文件中指定它要简单得多。
      猜你喜欢
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      相关资源
      最近更新 更多