views:

77

answers:

1

I've had this working before, but now it's not working and I've been tearing my hair out for the past two hours trying to figure it out.

I have several appenders, where some are for a "main" log, and another is for another "task" log. The main log has 4 appenders: console, memory, file, and DB (sqlite3). The task log has 3 appenders: memory, file, and DB (also sqlite).

What's driving me nuts is that all of the appenders except for the task log's DB appender work great. There's nothing particularly special about the task DB appender, other than that I use the ThreadContext Properties to put task-specific data into the log. And like I said, all of that data appears in the text file and memory buffer just fine.

I've looked for errors in the output window related to the DB appender, and there aren't any. I've compared both DB appenders in my configuration XML file, and they are identical... I even removed my custom properties from the mix, and the task DB appender still doesn't work!

My task logger is configured like this:

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

My DB appender is configured like this:

  <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>

My main log DB appender is configured the same way, yet it works. Can anyone recommend further debugging strategies?

+1  A: 

You can enable log4net internal debugging and capture debug messsages to a trace listener or the system debugger. I gave similar advice in the following post.

Garett
@Garett thanks, I'll give that a shot now! :)
Dave
This is the best debugging hint ever. :) Thanks, that totally helped me track down my problem!
Dave
Glad you were able to track down the problem. :)
Garett