Jerry Shea | 7 Aug 10:10

ASP.NET, AdoNetAppender and deferred property execution

Hi Everyone,
I am seeing a problem here which I believe is due to deferred property execution. I have a ClientLogger which gets a property value from the HttpSession as below.

    public class ClientLogger {
        public override string ToString() {
            string retval = "-";
            if (HttpContext.Current != null && HttpContext.Current.Session != null && HttpContext.Current.Session["client"] != null)
                retval = (string)HttpContext.Current.Session["client"];
            return retval;
        }
    }

My log4net is configured with an AdoNetAppender which of course is a BufferingAppender.

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
    <bufferSize value="100" />
    <connectionType value="blah..." />
    <connectionString value="blah..." />
    <commandText value="INSERT INTO blah..." />
    ... ...
    <parameter>
      <parameterName value=" <at> client" />
      <dbType value="String" />
      <size value="100" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%property{client}" />
      </layout>
    </parameter>
    ... ...
  </appender>

The problem is, when I look in my database I and compare the rows there with what I see in my log file (generated from RollingFileAppender) I can see that the property values for "client" do not match. I presume this is because my ClientLogger is not being called until the AdoNetAppender's buffer is flushed.

Can anyone confirm if my diagnosis is correct, and, if so, is there a way to have these properties evaluated when the log statement is executed, rather than at flush time?

Thanks, Jerry




Jerry Shea | 7 Aug 12:42

Re: ASP.NET, AdoNetAppender and deferred property execution

Yes I have confirmed that this is the case - when the AdoNetAppender's buffer flushes then and only then are the properties evaluated.


Jerry Shea | 11 Aug 06:30

Re: ASP.NET, AdoNetAppender and deferred property execution

Hi Everyone,

Apologies for sending multiple messages about this, but I guess my initial question was buried at the bottom of email#1.

Does anyone have a idea as to how I can force properties to be resolved at log time rather than flush time?

Thx, Jerry


2008/8/7 Jerry Shea <jerry.shea <at> gmail.com>
Yes I have confirmed that this is the case - when the AdoNetAppender's buffer flushes then and only then are the properties evaluated.



Ron Grabowski | 12 Aug 05:44
Favicon

Re: ASP.NET, AdoNetAppender and deferred property execution

Have you tried setting the Fix property to All or Partial?

 http://logging.apache.org/log4net/release/sdk/log4net.Appender.BufferingAppenderSkeleton.Fix.html

----- Original Message ----
From: Jerry Shea <jerry.shea <at> gmail.com>
To: log4net-user <at> logging.apache.org
Sent: Monday, August 11, 2008 12:30:43 AM
Subject: Re: ASP.NET, AdoNetAppender and deferred property execution

Hi Everyone,

Apologies for sending multiple messages about this, but I guess my initial question was buried at the bottom of email#1.

Does anyone have a idea as to how I can force properties to be resolved at log time rather than flush time?

Thx, Jerry


2008/8/7 Jerry Shea <jerry.shea <at> gmail.com>
Yes I have confirmed that this is the case - when the AdoNetAppender's buffer flushes then and only then are the properties evaluated.



Jerry Shea | 22 Aug 13:43

Re: ASP.NET, AdoNetAppender and deferred property execution

Ron,

thanks very much for the suggestion - the Fix property did the job after I worked out (from the log4net source) that my custom properties had to implement IFixingRequired. Once I did that I then found http://piers7.blogspot.com/2007/07/log4net-in-aspnet-redux-implement.html which describes exactly my issue.

Can I suggest some additions to the doco? I've created an issue in JIRA with a patch - https://issues.apache.org/jira/browse/LOG4NET-170 - would appreciate any feedback.

Cheers


2008/8/12 Ron Grabowski <rongrabowski <at> yahoo.com>

----- Original Message ----
From: Jerry Shea <jerry.shea <at> gmail.com>
To: log4net-user <at> logging.apache.org
Sent: Monday, August 11, 2008 12:30:43 AM
Subject: Re: ASP.NET, AdoNetAppender and deferred property execution

Hi Everyone,

Apologies for sending multiple messages about this, but I guess my initial question was buried at the bottom of email#1.

Does anyone have a idea as to how I can force properties to be resolved at log time rather than flush time?

Thx, Jerry


2008/8/7 Jerry Shea <jerry.shea <at> gmail.com>
Yes I have confirmed that this is the case - when the AdoNetAppender's buffer flushes then and only then are the properties evaluated.





Gmane