[英]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.