调试ADO log4net appender(不会附加)

时间:2010-09-01 05:19:14

标签: sqlite log4net appender adonetappender

我以前有过这个工作,但是现在它不起作用了,我在过去的两个小时里一直在试着弄清楚我的头发。

我有几个appender,其中一些用于“主”日志,另一个用于另一个“任务”日志。主日志有4个appender:控制台,内存,文件和DB(sqlite3)。任务日志有3个appender:内存,文件和DB(也是sqlite)。

让我疯狂的是,除了任务日志的DB appender之外,所有的appender 都很有效。除了我使用ThreadContext属性将特定于任务的数据放入日志之外,任务DB appender没有什么特别之处。就像我说的那样,所有这些数据都显示在文本文件和内存缓冲区中。

我在与DB appender相关的输出窗口中查找了错误,但没有。我在配置XML文件中比较了两个DB appender,它们是相同的......我甚至从混合中删除了我的自定义属性,而任务DB appender 仍然不起作用!

我的任务记录器配置如下:

<logger name="TaskLogger">
  <level value="DEBUG" />
  <appender-ref ref="TaskLogFile" />
  <appender-ref ref="TaskLogDB" />
  <appender-ref ref="TaskLogMemory" />
</logger>

我的DB appender配置如下:

  <appender name="TaskLogDB" type="log4net.Appender.AdoNetAppender">
    <bufferSize value="100" />
    <connectionType value="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    <connectionString value="Data Source=task_log.s3db;Version=3;" />
    <commandText value="INSERT INTO TaskLog (Date, Level, Thread, Logger, Message, Exception) VALUES (@Date, @Level, @Thread, @Logger, @Message, @Exception)" />
    <parameter>
      <parameterName value="@Date" />
      <dbType value="DateTime" />
      <layout type="log4net.Layout.RawTimeStampLayout" />
    </parameter>
    <parameter>
      <parameterName value="@Level" />
      <dbType value="String" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%level" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@Logger" />
      <dbType value="String" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%logger" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@Thread" />
      <dbType value="String" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%thread" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@Message" />
      <dbType value="String" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@Exception" />
      <dbType value="String" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%exception" />
      </layout>
    </parameter>
  </appender>

我的主日志数据库appender配置方式相同,但 it 有效。任何人都可以推荐进一步的调试策略吗?

1 个答案:

答案 0 :(得分:2)

您可以启用log4net内部调试并将调试消息捕获到跟踪侦听器或系统调试器。我在以下post中给出了类似的建议。