You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-user@logging.apache.org by Tom Williams <To...@fremontbank.com> on 2014/02/21 16:48:21 UTC

Help needed with debugging AdoNetAppender

We're using log4net 1.2.11 to log to a SQL Server database from an internal Windows service.   For the most part, log4net is working very well except for when SQL Server terminates the inactive log4net connection overnight.

I have the "reconnectonerror" property set to "true" in the log4net.config file but the database connection doesn't appear to get re-established.

Anyway, I found how to enable log4net internal debugging and when I enable it, I get log messages but nothing from the AdoNetAppender.  I can see the AdoNetAppender being setup, but when I successfully log to the database using the AdoNetAppender, I get nothing in the debug output.  I also use a RollingFileAppender to log messages generated by our Windows service and I can see debug messages showing the log file getting rolled, per our RollingFileAppender configuration settings.

So, my questions are:


1)       How can I get internal debug output from the AdoNetAppender?

2)      What is the best way to debug failed attempts to reconnect to the SQL Server database?

We're connecting to SQL Server 2008 and when things do work, log messages get logged in the database as desired.

Here is a snipet from our app.config file, which enables internal log4net debugging:

--------------  START  -----------------

<appSettings>
    .....
   <add key="log4net.Internal.Debug" value="true" />
</appSettings>
<system.diagnostics>
  <trace autoflush="true">
    <listeners>
       <add name="textWriterTraceListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="log4net-debug.log" />
    </listeners>
  </trace>
</system.diagnostics>

--------------  END --------------------

That creates a "log4net-debug.log" file that contains lots of info, once the Windows service has been running for a while.

Here is a snipet from our log4net.config file, which defines our appenders:

--------------  START  ------------------
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
     <file value="service.log" />
    <appendToFile value="true" />
    <maximumFileSize value="100kb" />
    <maxSizeRollBackups value="2" />
    <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %a %logger = %message%newline" />
    </layout>
  </appender>

  <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
     <bufferSize value="1" />
     <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken={some string}" />
     <connectionString value="{connection string for database connection}" />
     <commandText value="{SQL INSERT statement to log data}" />
     <reconnectonerror value="true" />

     <parameter>
         <parameterName value="@application" />
        <dbType value="String" />
        <size value="100" />
        <layout type="log4net.Layout.PatternLayout">
           <conversionPattern value="%appdomain" />
        </layout>
     </parameter>

(more parameters are defined similar to the above parameter)
  </appender>

  <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingFile" />
  </root>

  <logger name="DBLog">
     <appender-ref ref="ADONetAppender" />
  </logger>
</log4net>
</configuration>
--------------- END  --------------------

So, with the above settings, when I first start the Windows service, the log4net-debug.log file shows the creation of the appenders and it will eventually show the rolling of the log file.  I never see any messages from the ADONetAppender showing it logging messages to the database.

Thanks!

Tom


-----------------------------------------
The information contained in this electronic mail message is
confidential information intended only for the use of the
individual or entity named above. The information herein may also
be protected by the Electronic Communications Privacy Act, 18 USC
Sections 2510-2521. If the reader of this message is not the
intended recipient, you are hereby notified that any dissemination,
distribution or copying of this communication is strictly
prohibited. If you have received this communication in error,
please immediately notify us by e-mail and delete the original
message. In addition, to ensure compliance with requirements
imposed by the IRS, we inform you that any U.S. tax  advice
contained in this communication (including any attachments) is  not
intended or written to be used, and cannot be used, for the purpose
of (a) avoiding penalties under the Internal Revenue Code, or (b)
promoting, marketing or recommending to another party any matters
addressed in this communication. Thank you.

Re: Help needed with debugging AdoNetAppender

Posted by d_k <ma...@gmail.com>.
If its easily reproducible you can get the source code and debug the
AdoNetAppender.


On Fri, Feb 21, 2014 at 5:48 PM, Tom Williams
<To...@fremontbank.com>wrote:

>  We're using log4net 1.2.11 to log to a SQL Server database from an
> internal Windows service.   For the most part, log4net is working very well
> except for when SQL Server terminates the inactive log4net connection
> overnight.
>
>
>
> I have the "reconnectonerror" property set to "true" in the log4net.config
> file but the database connection doesn't appear to get re-established.
>
>
>
> Anyway, I found how to enable log4net internal debugging and when I enable
> it, I get log messages but nothing from the AdoNetAppender.  I can see the
> AdoNetAppender being setup, but when I successfully log to the database
> using the AdoNetAppender, I get nothing in the debug output.  I also use a
> RollingFileAppender to log messages generated by our Windows service and I
> can see debug messages showing the log file getting rolled, per our
> RollingFileAppender configuration settings.
>
>
>
> So, my questions are:
>
>
>
> 1)       How can I get internal debug output from the AdoNetAppender?
>
> 2)      What is the best way to debug failed attempts to reconnect to the
> SQL Server database?
>
>
>
> We're connecting to SQL Server 2008 and when things do work, log messages
> get logged in the database as desired.
>
>
>
> Here is a snipet from our app.config file, which enables internal log4net
> debugging:
>
>
>
> --------------  START  -----------------
>
>
>
> <appSettings>
>
>     .....
>
>    <add key="log4net.Internal.Debug" value="true" />
>
> </appSettings>
>
> <system.diagnostics>
>
>   <trace autoflush="true">
>
>     <listeners>
>
>        <add name="textWriterTraceListener"
> type="System.Diagnostics.TextWriterTraceListener"
> initializeData="log4net-debug.log" />
>
>     </listeners>
>
>   </trace>
>
> </system.diagnostics>
>
>
>
> --------------  END --------------------
>
>
>
> That creates a "log4net-debug.log" file that contains lots of info, once
> the Windows service has been running for a while.
>
>
>
> Here is a snipet from our log4net.config file, which defines our appenders:
>
>
>
> --------------  START  ------------------
>
> <?xml version="1.0" encoding="utf-8" ?>
>
> <configuration>
>
> <log4net>
>
>   <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
>
>      <file value="service.log" />
>
>     <appendToFile value="true" />
>
>     <maximumFileSize value="100kb" />
>
>     <maxSizeRollBackups value="2" />
>
>     <layout type="log4net.Layout.PatternLayout">
>
>           <conversionPattern value="%date [%thread] %-5level %a %logger =
> %message%newline" />
>
>     </layout>
>
>   </appender>
>
>
>
>   <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
>
>      <bufferSize value="1" />
>
>      <connectionType value="System.Data.SqlClient.SqlConnection,
> System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken={some
> string}" />
>
>      <connectionString value="{connection string for database connection}"
> />
>
>      <commandText value="{SQL INSERT statement to log data}" />
>
>      <reconnectonerror value="true" />
>
>
>
>      <parameter>
>
>          <parameterName value="@application" />
>
>         <dbType value="String" />
>
>         <size value="100" />
>
>         <layout type="log4net.Layout.PatternLayout">
>
>            <conversionPattern value="%appdomain" />
>
>         </layout>
>
>      </parameter>
>
>
>
> (more parameters are defined similar to the above parameter)
>
>   </appender>
>
>
>
>   <root>
>
>       <level value="DEBUG" />
>
>       <appender-ref ref="RollingFile" />
>
>   </root>
>
>
>
>   <logger name="DBLog">
>
>      <appender-ref ref="ADONetAppender" />
>
>   </logger>
>
> </log4net>
>
> </configuration>
>
> --------------- END  --------------------
>
>
>
> So, with the above settings, when I first start the Windows service, the
> log4net-debug.log file shows the creation of the appenders and it will
> eventually show the rolling of the log file.  I never see any messages from
> the ADONetAppender showing it logging messages to the database.
>
>
>
> Thanks!
>
>
>
> Tom
>
> ------------------------------
>
> * The information contained in this electronic mail message is
> confidential information intended only for the use of the individual or
> entity named above. The information herein may also be protected by the
> Electronic Communications Privacy Act, 18 USC Sections 2510-2521. If the
> reader of this message is not the intended recipient, you are hereby
> notified that any dissemination, distribution or copying of this
> communication is strictly prohibited. If you have received this
> communication in error, please immediately notify us by e-mail and delete
> the original message. In addition, to ensure compliance with requirements
> imposed by the IRS, we inform you that any U.S. tax advice contained in
> this communication (including any attachments) is not intended or written
> to be used, and cannot be used, for the purpose of (a) avoiding penalties
> under the Internal Revenue Code, or (b) promoting, marketing or
> recommending to another party any matters addressed in this communication.
> Thank you. *
>