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 bolikdimon <bo...@mail.ru> on 2007/01/08 14:02:36 UTC

AdoNetAppender problem.

Hello. Help me please.
I'm using AdoNetAppender. How can I pass NULL value into stored procedure ? 
Here is my code:
             ...
            ThreadContext.Properties["ProcessID"] = DbNull.Value;
            log.Debug(message);

Config-file:
      <parameter>
        <parameterName value="@ProcessID" />
        <dbType value="Int64" />
        <layout type="log4net.Layout.PatternLayout" value="%X{ProcessID}" />
      </parameter>

What's wrong ?

-- 
View this message in context: http://www.nabble.com/AdoNetAppender-problem.-tf2939176.html#a8217407
Sent from the Log4net - Users mailing list archive at Nabble.com.


Re: AdoNetAppender problem.

Posted by bolikdimon <bo...@mail.ru>.
Thank you so much, but how can I set the type of the parameter ?
Here is my cofig file:

      <parameter>
        <parameterName value="@ProcessID" />
        <dbType value="Int64" />
        <layout type="log4net.Layout.PatternLayout" value="%X{ProcessID}" />
      </parameter>

Where should I add MyAdoNetAppenderParameter ?





Stephen Murtagh wrote:
> 
> I had a similar problem about a year back, ended up subclassing
> AdoNetAppenderParameter and overriding the FormatValue method as below:
> 
>  public class MyAdoNetAppenderParameter : AdoNetAppenderParameter
>  {
>   /// <summary>
>   /// Custom version of FormatValue method which also converts NullText
>   value (null) to DBNull
>   /// </summary>
>   /// <param name="command"></param>
>   /// <param name="loggingEvent"></param>
>   public override void FormatValue(System.Data.IDbCommand command,
>   log4net.Core.LoggingEvent loggingEvent)
>   {
>    // Lookup the parameter
>    IDbDataParameter param =
>    (IDbDataParameter)command.Parameters[ParameterName];
> 
>    // Format the value
>    object formattedValue = Layout.Format(loggingEvent);
> 
>    // If the value is null then convert to a DBNull
>    if ((formattedValue == null) || (formattedValue.ToString() ==
>    SystemInfo.NullText))
>    {
>     formattedValue = DBNull.Value;
>    }
> 
>    param.Value = formattedValue;
>   }
>  }
> 
> This can be intergrated with any other changes to your existing logging
> code and only one minor change to the config file - set the type of the
> parameter to that of your new class above.
> 
> Hope this helps.
> 
> Is there a better or recommended way of doing this?
> 
> 
> -----bolikdimon <bo...@mail.ru> wrote: -----
> 
> 
> To: log4net-user@logging.apache.org
> From: bolikdimon <bo...@mail.ru>
> Date: 01/08/2007 01:02PM
> Subject: AdoNetAppender problem.
> 
> 
> Hello. Help me please.
> I'm using AdoNetAppender. How can I pass NULL value into stored procedure
> ?
> Here is my code:
>             ...
>            ThreadContext.Properties["ProcessID"] = DbNull.Value;
>            log.Debug(message);
> 
> Config-file:
>      <parameter>
>        <parameterName value="@ProcessID" />
>        <dbType value="Int64" />
>        <layout type="log4net.Layout.PatternLayout" value="%X{ProcessID}"
> />
>      </parameter>
> 
> What's wrong ?
> 
> --
> View this message in context:
> http://www.nabble.com/AdoNetAppender-problem.-tf2939176.html#a8217407
> Sent from the Log4net - Users mailing list archive at Nabble.com.
> 
> 
> 
> *********************************************************************************
> 
> Disclaimer: This electronic mail, together with any attachments, is for
> the exclusive and confidential use of the recipient addressee. Any other
> distribution, use or reproduction without our prior consent is
> unauthorised and strictly prohibited. If you have received this message in
> error, please delete it immediately and contact the sender directly or the
> Robert Wiseman & Sons Ltd IT Helpdesk on +44 (0)1355 270634. Any views or
> opinions expressed in this message are those of the author and do not
> necessarily represent those of Robert Wiseman & Sons Ltd or of any of its
> associated companies. No reliance may be placed on this message without
> written confirmation from an authorised representative of the company.
> 
> Robert Wiseman & Sons Limited reserves the right to monitor all e-mail
> communications through its network.
> 
> This message has been checked for viruses but the recipient is strongly
> advised to re-scan the message before opening any attachments or attached
> executable files.
> 
> ********************************************************************************
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/AdoNetAppender-problem.-tf2939176.html#a8220353
Sent from the Log4net - Users mailing list archive at Nabble.com.


Re: AdoNetAppender problem.

Posted by Karel Kral <kr...@volny.cz>.
Did you ever watch debug output in Visual Studio? In my experience an
ADONetAppender is unable to correctly close on program shutdown and
these exceptions are written to debug output.

I have found a simple solution: to call LogManager.Shutdown on program exit.
---------
Prostredi: VB.NET, VS2005 Pro, XP Pro/P4 3GHz, 2GB RAM
___________________________________________________
Karel Kral, vyvojar
ANETE, s.r.o.
___________________________________________________

On 11.1.2007 20:17, Cheng wrote:
> does any one experience of loss log entries when using AdoNetAppender?
> 
> I have both RollingFileAppender and AdoNetAppender in one of my
> application. From time to time, there were some of log entries missing
> in the database but they were in the log file. The bufferSize is set to 1.
> 
> On 1/8/07, *bolikdimon* <bolikdimon@mail.ru <ma...@mail.ru>>
> wrote:
> 
> 
>     I found better way of doing this:
>     Here is my config file:
>           <parameter>
>             <parameterName value="@ProcessID" />
>             <dbType value="Int64" />
>             <layout type=" log4net.Layout.RawPropertyLayout" >
>               <key value="ProcessID" />
>             </layout>
>           </parameter>
> 
>     It works !
> 
> 
> 
>     Stephen Murtagh wrote:
>     >
>     > I had a similar problem about a year back, ended up subclassing
>     > AdoNetAppenderParameter and overriding the FormatValue method as
>     below:
>     >
>     >  public class MyAdoNetAppenderParameter : AdoNetAppenderParameter
>     >  {
>     >   /// <summary>
>     >   /// Custom version of FormatValue method which also converts
>     NullText
>     >   value (null) to DBNull
>     >   /// </summary>
>     >   /// <param name="command"></param>
>     >   /// <param name="loggingEvent"></param>
>     >   public override void FormatValue(System.Data.IDbCommand command,
>     >   log4net.Core.LoggingEvent loggingEvent)
>     >   {
>     >    // Lookup the parameter
>     >    IDbDataParameter param =
>     >    (IDbDataParameter)command.Parameters[ParameterName];
>     >
>     >    // Format the value
>     >    object formattedValue = Layout.Format(loggingEvent);
>     >
>     >    // If the value is null then convert to a DBNull
>     >    if ((formattedValue == null) || (formattedValue.ToString() ==
>     >    SystemInfo.NullText))
>     >    {
>     >     formattedValue = DBNull.Value;
>     >    }
>     >
>     >    param.Value = formattedValue;
>     >   }
>     >  }
>     >
>     > This can be intergrated with any other changes to your existing
>     logging
>     > code and only one minor change to the config file - set the type
>     of the
>     > parameter to that of your new class above.
>     >
>     > Hope this helps.
>     >
>     > Is there a better or recommended way of doing this?
>     >
>     >
>     > -----bolikdimon <bolikdimon@mail.ru <ma...@mail.ru>>
>     wrote: -----
>     >
>     >
>     > To: log4net-user@logging.apache.org
>     <ma...@logging.apache.org>
>     > From: bolikdimon <bolikdimon@mail.ru <ma...@mail.ru>>
>     > Date: 01/08/2007 01:02PM
>     > Subject: AdoNetAppender problem.
>     >
>     >
>     > Hello. Help me please.
>     > I'm using AdoNetAppender. How can I pass NULL value into stored
>     procedure
>     > ?
>     > Here is my code:
>     >             ...
>     >            ThreadContext.Properties["ProcessID"] = DbNull.Value;
>     >            log.Debug(message);
>     >
>     > Config-file:
>     >      <parameter>
>     >        <parameterName value="@ProcessID" />
>     >        <dbType value="Int64" />
>     >        <layout type="log4net.Layout.PatternLayout"
>     value="%X{ProcessID}"
>     > />
>     >      </parameter>
>     >
>     > What's wrong ?
>     >
>     > --
>     > View this message in context:
>     > http://www.nabble.com/AdoNetAppender-problem.-tf2939176.html#a8217407
>     > Sent from the Log4net - Users mailing list archive at Nabble.com
>     <http://Nabble.com>.
>     >
>     >
>     >
>     >
>     *********************************************************************************
>     >
>     > Disclaimer: This electronic mail, together with any attachments,
>     is for
>     > the exclusive and confidential use of the recipient addressee. Any
>     other
>     > distribution, use or reproduction without our prior consent is
>     > unauthorised and strictly prohibited. If you have received this
>     message in
>     > error, please delete it immediately and contact the sender
>     directly or the
>     > Robert Wiseman & Sons Ltd IT Helpdesk on +44 (0)1355 270634. Any
>     views or
>     > opinions expressed in this message are those of the author and do not
>     > necessarily represent those of Robert Wiseman & Sons Ltd or of any
>     of its
>     > associated companies. No reliance may be placed on this message
>     without
>     > written confirmation from an authorised representative of the company.
>     >
>     > Robert Wiseman & Sons Limited reserves the right to monitor all e-mail
>     > communications through its network.
>     >
>     > This message has been checked for viruses but the recipient is
>     strongly
>     > advised to re-scan the message before opening any attachments or
>     attached
>     > executable files.
>     >
>     >
>     ********************************************************************************
> 
>     >
>     >
>     >
> 
>     --
>     View this message in context:
>     http://www.nabble.com/AdoNetAppender-problem.-tf2939176.html#a8223361
>     Sent from the Log4net - Users mailing list archive at Nabble.com
>     <http://Nabble.com>.
> 
> 

Re: AdoNetAppender problem.

Posted by Cheng <ch...@gmail.com>.
does any one experience of loss log entries when using AdoNetAppender?

I have both RollingFileAppender and AdoNetAppender in one of my application.
>From time to time, there were some of log entries missing in the database
but they were in the log file. The bufferSize is set to 1.

On 1/8/07, bolikdimon <bo...@mail.ru> wrote:
>
>
> I found better way of doing this:
> Here is my config file:
>       <parameter>
>         <parameterName value="@ProcessID" />
>         <dbType value="Int64" />
>         <layout type="log4net.Layout.RawPropertyLayout" >
>           <key value="ProcessID" />
>         </layout>
>       </parameter>
>
> It works !
>
>
>
> Stephen Murtagh wrote:
> >
> > I had a similar problem about a year back, ended up subclassing
> > AdoNetAppenderParameter and overriding the FormatValue method as below:
> >
> >  public class MyAdoNetAppenderParameter : AdoNetAppenderParameter
> >  {
> >   /// <summary>
> >   /// Custom version of FormatValue method which also converts NullText
> >   value (null) to DBNull
> >   /// </summary>
> >   /// <param name="command"></param>
> >   /// <param name="loggingEvent"></param>
> >   public override void FormatValue(System.Data.IDbCommand command,
> >   log4net.Core.LoggingEvent loggingEvent)
> >   {
> >    // Lookup the parameter
> >    IDbDataParameter param =
> >    (IDbDataParameter)command.Parameters[ParameterName];
> >
> >    // Format the value
> >    object formattedValue = Layout.Format(loggingEvent);
> >
> >    // If the value is null then convert to a DBNull
> >    if ((formattedValue == null) || (formattedValue.ToString() ==
> >    SystemInfo.NullText))
> >    {
> >     formattedValue = DBNull.Value;
> >    }
> >
> >    param.Value = formattedValue;
> >   }
> >  }
> >
> > This can be intergrated with any other changes to your existing logging
> > code and only one minor change to the config file - set the type of the
> > parameter to that of your new class above.
> >
> > Hope this helps.
> >
> > Is there a better or recommended way of doing this?
> >
> >
> > -----bolikdimon <bo...@mail.ru> wrote: -----
> >
> >
> > To: log4net-user@logging.apache.org
> > From: bolikdimon <bo...@mail.ru>
> > Date: 01/08/2007 01:02PM
> > Subject: AdoNetAppender problem.
> >
> >
> > Hello. Help me please.
> > I'm using AdoNetAppender. How can I pass NULL value into stored
> procedure
> > ?
> > Here is my code:
> >             ...
> >            ThreadContext.Properties["ProcessID"] = DbNull.Value;
> >            log.Debug(message);
> >
> > Config-file:
> >      <parameter>
> >        <parameterName value="@ProcessID" />
> >        <dbType value="Int64" />
> >        <layout type="log4net.Layout.PatternLayout" value="%X{ProcessID}"
> > />
> >      </parameter>
> >
> > What's wrong ?
> >
> > --
> > View this message in context:
> > http://www.nabble.com/AdoNetAppender-problem.-tf2939176.html#a8217407
> > Sent from the Log4net - Users mailing list archive at Nabble.com.
> >
> >
> >
> >
> *********************************************************************************
> >
> > Disclaimer: This electronic mail, together with any attachments, is for
> > the exclusive and confidential use of the recipient addressee. Any other
> > distribution, use or reproduction without our prior consent is
> > unauthorised and strictly prohibited. If you have received this message
> in
> > error, please delete it immediately and contact the sender directly or
> the
> > Robert Wiseman & Sons Ltd IT Helpdesk on +44 (0)1355 270634. Any views
> or
> > opinions expressed in this message are those of the author and do not
> > necessarily represent those of Robert Wiseman & Sons Ltd or of any of
> its
> > associated companies. No reliance may be placed on this message without
> > written confirmation from an authorised representative of the company.
> >
> > Robert Wiseman & Sons Limited reserves the right to monitor all e-mail
> > communications through its network.
> >
> > This message has been checked for viruses but the recipient is strongly
> > advised to re-scan the message before opening any attachments or
> attached
> > executable files.
> >
> >
> ********************************************************************************
> >
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/AdoNetAppender-problem.-tf2939176.html#a8223361
> Sent from the Log4net - Users mailing list archive at Nabble.com.
>
>

Re: AdoNetAppender problem.

Posted by bolikdimon <bo...@mail.ru>.
I found better way of doing this:
Here is my config file:
      <parameter>
        <parameterName value="@ProcessID" />
        <dbType value="Int64" />
        <layout type="log4net.Layout.RawPropertyLayout" >
          <key value="ProcessID" />
        </layout>
      </parameter>

It works !



Stephen Murtagh wrote:
> 
> I had a similar problem about a year back, ended up subclassing
> AdoNetAppenderParameter and overriding the FormatValue method as below:
> 
>  public class MyAdoNetAppenderParameter : AdoNetAppenderParameter
>  {
>   /// <summary>
>   /// Custom version of FormatValue method which also converts NullText
>   value (null) to DBNull
>   /// </summary>
>   /// <param name="command"></param>
>   /// <param name="loggingEvent"></param>
>   public override void FormatValue(System.Data.IDbCommand command,
>   log4net.Core.LoggingEvent loggingEvent)
>   {
>    // Lookup the parameter
>    IDbDataParameter param =
>    (IDbDataParameter)command.Parameters[ParameterName];
> 
>    // Format the value
>    object formattedValue = Layout.Format(loggingEvent);
> 
>    // If the value is null then convert to a DBNull
>    if ((formattedValue == null) || (formattedValue.ToString() ==
>    SystemInfo.NullText))
>    {
>     formattedValue = DBNull.Value;
>    }
> 
>    param.Value = formattedValue;
>   }
>  }
> 
> This can be intergrated with any other changes to your existing logging
> code and only one minor change to the config file - set the type of the
> parameter to that of your new class above.
> 
> Hope this helps.
> 
> Is there a better or recommended way of doing this?
> 
> 
> -----bolikdimon <bo...@mail.ru> wrote: -----
> 
> 
> To: log4net-user@logging.apache.org
> From: bolikdimon <bo...@mail.ru>
> Date: 01/08/2007 01:02PM
> Subject: AdoNetAppender problem.
> 
> 
> Hello. Help me please.
> I'm using AdoNetAppender. How can I pass NULL value into stored procedure
> ?
> Here is my code:
>             ...
>            ThreadContext.Properties["ProcessID"] = DbNull.Value;
>            log.Debug(message);
> 
> Config-file:
>      <parameter>
>        <parameterName value="@ProcessID" />
>        <dbType value="Int64" />
>        <layout type="log4net.Layout.PatternLayout" value="%X{ProcessID}"
> />
>      </parameter>
> 
> What's wrong ?
> 
> --
> View this message in context:
> http://www.nabble.com/AdoNetAppender-problem.-tf2939176.html#a8217407
> Sent from the Log4net - Users mailing list archive at Nabble.com.
> 
> 
> 
> *********************************************************************************
> 
> Disclaimer: This electronic mail, together with any attachments, is for
> the exclusive and confidential use of the recipient addressee. Any other
> distribution, use or reproduction without our prior consent is
> unauthorised and strictly prohibited. If you have received this message in
> error, please delete it immediately and contact the sender directly or the
> Robert Wiseman & Sons Ltd IT Helpdesk on +44 (0)1355 270634. Any views or
> opinions expressed in this message are those of the author and do not
> necessarily represent those of Robert Wiseman & Sons Ltd or of any of its
> associated companies. No reliance may be placed on this message without
> written confirmation from an authorised representative of the company.
> 
> Robert Wiseman & Sons Limited reserves the right to monitor all e-mail
> communications through its network.
> 
> This message has been checked for viruses but the recipient is strongly
> advised to re-scan the message before opening any attachments or attached
> executable files.
> 
> ********************************************************************************
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/AdoNetAppender-problem.-tf2939176.html#a8223361
Sent from the Log4net - Users mailing list archive at Nabble.com.