2012-07-10 96 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