【问题标题】:Debugging an ADO log4net appender (that won't append)调试 ADO log4net 附加程序(不会附加)
【发布时间】:2021-09-06 20:26:45
【问题描述】:

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

我有几个附加程序,其中一些用于“主”日志,另一个用于另一个“任务”日志。主日志有 4 个附加程序:控制台、内存、文件和数据库(sqlite3)。任务日志有 3 个附加程序:内存、文件和数据库(也是 sqlite)。

让我抓狂的是所有的附加程序除了任务日志的数据库附加程序工作得很好。除了我使用 ThreadContext 属性将特定于任务的数据放入日志之外,任务 DB 附加程序没有什么特别之处。就像我说的,所有的数据都出现在文本文件和内存缓冲区中就好了。

我在输出窗口中查找了与 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>

我的主日志数据库附加程序的配置方式相同,但 可以工作。谁能推荐进一步的调试策略?

【问题讨论】:

    标签: sqlite log4net appender adonetappender


    【解决方案1】:

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

    【讨论】:

    • 这是有史以来最好的调试提示。 :) 谢谢,这完全帮助我找到了我的问题!
    • 很高兴您能够找到问题所在。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多