簡體   English   中英

log4net自定義日志記錄

[英]log4net custom logging

有人請為這個問題推薦一個更好的標題。 我不確定該放什么。

現在,我們有一個圍繞ILog實例的日志包裝器,該日志包裝器在記錄的消息之前添加了一些文本。 我想做的是實現ILayout或ILogger或IAppender,然后可以在我們的配置XML中指定它。 我要添加的文字不是靜態的。 因為在每個日志條目中都使用了它,所以我們只想實現一次,而不是在代碼中生成日志消息的任何地方實現。

這有意義嗎? 我應該實現哪個接口? 現在,我們使用PatternLayout。

這取決於您計划如何重用它(例如,使用多個追加程序時),但是由於您正在更改日志消息的文本 ,因此ILayout聽起來是最佳選擇。

您可以繼承PatternLayout並以Format

我同意實現自定義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);
      }
    }
  }

這是我提出的關於創建可以采用鍵值的PatternLayoutConverter的問題的鏈接 它顯示了如何在log4net和NLog中進行操作以及如何進行配置。

或者,您可以包裝一個log4net記錄器,並在包裝​​器的“ Log”方法中,可以修改輸入消息,也可以將自定義值放在GlobalDiagnosticContext.Properties或ThreadDiagnosticContext.Properties中,然后通過常規在輸出中引用這些值。屬性令牌方法。

您可能希望在應用程序上使用依賴項注入,可以在以后將其更改為所需的登錄方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM