无法使用企业库登录数据库

时间:2014-06-25 09:49:52

标签: c# .net sql-server enterprise-library-5

我一直在尝试使用企业库记录事件查看器和数据库中的异常,对于事件查看器我已成功记录异常,但我无法在数据库中记录异常。主要问题是我没有收到任何错误 我已使用企业控制台设置配置文件,并将所有字段保留为默认值 我的网络配置部分看起来像这样

 <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="SampleLog" machineName="." traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack"
    filter="All" />
  <add name="Database Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.Database.FormattedDatabaseTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
    listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Database.Configuration.FormattedDatabaseTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
    databaseInstanceName="Sample ADO Connection String" writeLogStoredProcName="WriteLog"
    addCategoryStoredProcName="AddCategory" formatter="Text Formatter"
    traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack" />
  </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}{newline}&#xA;Message: {message}{newline}&#xA;Category: {category}{newline}&#xA;Priority: {priority}{newline}&#xA;EventId: {eventid}{newline}&#xA;Severity: {severity}{newline}&#xA;Title:{title}{newline}&#xA;Machine: {localMachine}{newline}&#xA;App Domain: {localAppDomain}{newline}&#xA;ProcessId: {localProcessId}{newline}&#xA;Process Name: {localProcessName}{newline}&#xA;Thread Name: {threadName}{newline}&#xA;Win32 ThreadId:{win32ThreadId}{newline}&#xA;Extended Properties: {dictionary({key} - {value}{newline})}"
    name="Text Formatter" />
</formatters>
<categorySources>
  <add switchValue="All" autoFlush="false" name="General">
    <listeners>
      <add name="Event Log Listener" />
      <add name="Database Trace Listener" />
    </listeners>
  </add>
  <add switchValue="All" name="EventLogSample">
    <listeners>
      <add name="Event Log Listener" />
    </listeners>
  </add>
  <add switchValue="All" name="DBExceptions">
    <listeners>
      <add name="Database Trace Listener" />
    </listeners>
  </add>
</categorySources>
<specialSources>
  <allEvents switchValue="All" name="All Events">
    <listeners>
      <add name="Database Trace Listener" />
      <add name="Event Log Listener" />
    </listeners>
  </allEvents>
  <notProcessed switchValue="All" name="Unprocessed Category">
    <listeners>
      <add name="Database Trace Listener" />
    </listeners>
  </notProcessed>
  <errors switchValue="All" autoFlush="false" name="Logging Errors &amp; Warnings">
    <listeners>
      <add name="Database Trace Listener" />
      <add name="Event Log Listener" />
    </listeners>
  </errors>
</specialSources>

我正在将C#代码中的logger设置为

DatabaseFactory.SetDatabaseProviderFactory(new DatabaseProviderFactory());
Logger.SetLogWriter(new LogWriterFactory().Create());

然后将异常记录为

LogEntry logEntry = new LogEntry();
logEntry.EventId = 100;
logEntry.Priority = 2;
logEntry.Message = "Informational message";
logEntry.Categories.Add("DBExceptions");
Logger.Write(logEntry);

企业库中的默认脚本是

sqlcmd -S (localdb)\v11.0 -E -i CreateLoggingDatabase.sql
sqlcmd -S (localdb)\v11.0 -E -i CreateLoggingDatabaseObjects.sql -d Logging

这是运行此错误的cmd文件正在事件查看器中记录但数据库中没有记录任何内容我尝试检查(localdb)\ v11.0数据库,我认为这些默认脚本即CreateLoggingDatabaseObjects.sql和CreateLoggingDatabase.sql没有被触发。在这方面帮助我,我尝试了很多方法,但没有任何作用,它在事件查看器中完美记录。

1 个答案:

答案 0 :(得分:1)

之后,安静的冲浪终于得到了解决方案 首先,您必须创建由企业库安装到您的数据库的日志数据库(localdb)\ v11.0的所有结构,即每个表和存储过程。 否则,您可以通过在packages文件夹中的entrepreneelibrary.logging.database文件夹中执行sql脚本来实现它。 完成此操作后,您就可以使用DB中的日志记录异常了。 注意;您需要将这些脚本添加到要在其中记录例外的数据库中

您也可以使用Ent Lib控制台配置您的侦听器。 令人兴奋的是,对于entlib来说,没有任何有用的博客我将尽快继续并分享这些步骤。 希望,它有助于其他人