使用Microsoft EnterpriseLibrary(微软企业库)日志组件把系统日志写入数据库和xml文件
这里只是说明在项目中如何配置使用微软企业库的日志组件,对数据库方面的配置请参考其他资料。
1、在项目中添加Microsoft.Practices.EnterpriseLibrary.Data.dll、Microsoft.Practices.EnterpriseLibrary.Logging.dll、Microsoft.Practices.EnterpriseLibrary.Logging.Database.dll这三个引用。
2、打开EnterpriseLibrary的配置工具EntLibConfig.exe
1)选择菜单“Block->Add Logging Setting"
2)点击“+”号添加Logging Target Listeners,选择Add Database Trace Listener
3、设置Database Trace Listener中的参数,比如数据库连接、插入日志存储过程、插入分类存储过程、选择文本格式等
4、设置Database Setting中的“Connection String”中的数据库连接
5、最后保存配置文件到项目路径中。
设置后的配置文件:
<configuration> <configSections> <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" /> <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" /> </configSections> <loggingConfiguration name="" tracingEnabled="true" defaultCategory="General"> <listeners> <add name="Event Log Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" source="Enterprise Library Logging" formatter="Text Formatter" log="" machineName="." traceOutputOptions="None" /> <add name="Database Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.Database.FormattedDatabaseTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Database.Configuration.FormattedDatabaseTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" databaseInstanceName="Connection String" writeLogStoredProcName="EL_WRITELOG" addCategoryStoredProcName="EL_ADDCATEGORY" formatter="Text Formatter" /> <add name="XML Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.XmlTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.XmlTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" fileName="test.xml" /> </listeners> <formatters> <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" template="<TIMESTAMP> {timestamp}</TIMESTAMP> {newline}
<MESSAGE> {message}</MESSAGE>{newline}
<CATEGORY>{category}</CATEGORY>{newline}
<PRIORITY>{priority}</PRIORITY>{newline}
<EVENTID>{eventid}</EVENTID>{newline}
<SEVERITY>{severity}</SEVERITY>{newline}
<TITLE>{title}</TITLE>{newline}
<MACHINE>{localMachine}</MACHINE>{newline}
<APP DOMAIN> {localAppDomain}</APP DOMAIN>{newline}
<PROCESSID>{localProcessId}</PROCESSID>{newline}
<PROCESS NAME> {localProcessName}</PROCESS NAME> {newline}
<THREAD NAME> {threadName}</THREAD NAME>{newline}
<WIN32 THREADID>{win32ThreadId}</WIN32 THREADID>{newline}
<EXTENDED PROPERTIES> {dictionary(<KEY>{key}</KEY> - <VALUE>{value}</VALUE>{newline})}</EXTENDED PROPERTIES>" name="Text Formatter" /> </formatters> <categorySources> <add switchValue="All" name="General"> <listeners> <add name="Database Trace Listener" /> <add name="XML Trace Listener" /> </listeners> </add> </categorySources> <specialSources> <allEvents switchValue="All" name="All Events" /> <notProcessed switchValue="All" name="Unprocessed Category" /> <errors switchValue="All" name="Logging Errors & Warnings"> <listeners> <add name="Database Trace Listener" /> <add name="XML Trace Listener" /> </listeners> </errors> </specialSources> </loggingConfiguration> <dataConfiguration defaultDatabase="Connection String" /> <connectionStrings> <add name="Connection String" connectionString="DATA SOURCE=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = eifoclog)));PERSIST SECURITY INFO=True;USER ID=FOC;Password=foc" providerName="System.Data.OracleClient" /> </connectionStrings> </configuration>
需要注意的是:
在工具中只能选一个监听器,但实际可以有多个监听器同时监听。
<categorySources>
<add switchValue="All" name="General">
<listeners>
<add name="Database Trace Listener" />
<add name="XML Trace Listener" />
</listeners>
</add>
</categorySources>
在项目中使用:
class Program { static void Main(string[] args) { LogEntry logEntry = new LogEntry(); logEntry.EventId = 1; logEntry.Priority = 1; logEntry.Severity = System.Diagnostics.TraceEventType.Error; logEntry.Title = "标题"; logEntry.Message = "test"; logEntry.Categories.Add("C#学习"); logEntry.Categories.Add("Microsoft Enterprise Library学习"); Logger.Writer.Write(logEntry, "General"); Console.WriteLine("日志写入完成!"); } }
本文参考博客地址:http://www.cnblogs.com/huangcong/archive/2010/06/04/1751087.html
示例代码地址:https://files.cnblogs.com/qiu2013/ConsoleApplication1.zip