2012-07-10 47 views
0

我正在使用Enterprise Library 5.0,我的任務是將信息記錄到數據庫。爲此,我使用了帶數據庫跟蹤監聽器的企業庫日誌記錄應用程序塊。Enterprise Library 5.0記錄應用程序塊:使用DatabaseTraceListener記錄Custome消息

現在,幾天後,我發現我需要一些更多的信息登錄到Logging.LOG表。它們是:User_ID,Session_ID等。

根據業務需求,我無法使用LogEntry類的ExtendedProperty屬性,並將此信息存儲在XML fomrat的Log Table的FormattedMessage列中。我想在日誌數據庫的日誌表中輸入名稱爲「User_ID」和「Session_ID」的正確列。

問題是:我如何在日誌表中推送自定義信息?

爲此,我找到了一些所謂的「CustomTraceListener」我們需要重寫的兩個方法,即寫入(字符串消息)& WRITELOG(字符串消息)

  • 如何使用這個CustomeTraceListener推custome消息日誌表?

  • Write方法需要字符串類型的單個參數,意味着我得到一個串連字符串,我需要分解成不同的信息,並推入數據庫中使用自己的代碼?

可有人請給我CustomeTraceListener的執行力度例子 - >數據庫

請幫助我。

感謝,

蘇拉傑

回答

1

按照此創建一個自定義跟蹤監聽器:http://msdn.microsoft.com/en-us/library/ff647545.aspx

然後,您可以做這樣的事情用流利的配置(代碼不工作,但給你一個想法) :

var builder = new ConfigurationSourceBuilder(); 
    var serviceConfig = new NameValueCollection(); 
    serviceConfig.Add("Key", "data"); 
    builder.ConfigureLogging() 
     .LogToCategoryNamed("General") 
     .WithOptions.SetAsDefaultCategory() 
     .SendTo.Custom<ServiceTraceListener>("ServiceTraceListener", serviceConfig) 
     .FormatWith(new FormatterBuilder() 
     .TextFormatterNamed("Text Formatter") 
     .UsingTemplate("Timestamp: {timestamp}...{newline})}")); 

    var configSource = new DictionaryConfigurationSource(); 
    configSource.Add(LoggingSettings.SectionName, builder.Get(LoggingSettings.SectionName)); 
    var cont = EnterpriseLibraryContainer.CreateDefaultContainer(configSource); 
    return cont.GetInstance<LogWriter>(); 

(代碼從±:Enterprise Library 5.0 Logging using CustomTraceListener and ConfigurationSourceBuilder

下面是數據的概述,你可以在.UsingTemplate方法使用: http://msdn.microsoft.com/en-us/library/microsoft.practices.enterpriselibrary.logging.configuration.textformatterdata.template(v=PandP.50).aspx

此模板然後被你的CustomTraceListener TRACEDATA覆蓋方法使用(如果您按照演練從MSDN我聯繫這裏)。

參見:http://msdn.microsoft.com/en-us/library/ff664363(v=PandP.50).aspx 額外的格式:http://msdn.microsoft.com/en-us/library/ff664562(v=PandP.50).aspx