Log4net
  1. Log4net
  2. LOG4NET-129

EventLogAppender EventID parsing does not handle Active Properties properly

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: 1.2.10
    • Fix Version/s: 1.2.11
    • Component/s: Appenders
    • Labels:
      None

      Description

      The EventLogAppender supports setting the EventID of the Event being logged through Context Properties, as described here:
      http://www.mail-archive.com/log4net-user@logging.apache.org/msg02396.html

      However, since GlobalContext is inappropriate for storing the EventID (as it is likely to be specific for any given individual call to Log) and ThreadContext cannot be used reliably when running in the context of ASP.NET (since ASP.NET might switch the request between threads during execution, as outlined here: http://piers7.blogspot.com/2005/12/log4net-context-problems-with-aspnet.html ), it would be nice to be able to use an Active Property instead (which could, for instance, delegate calls for the EventID to data stored in HttpContext)

      Unfortunately, this does not work, since the EventLogAppender assumes that the Context Property holding the EventID is either int or string. The relevant code is found in EventLogAppender.cs, in the override protected void Append(LoggingEvent loggingEvent) method:

      if (eventIDPropertyObj is int)

      { eventID = (int)eventIDPropertyObj; }

      else

      { string eventIDPropertyString = eventIDPropertyObj as string; }

      Any Active Property object will end up as null through the "as string" call, and be ignored.

      Suggested naive fix: If eventIDPropertyString is non-null and of other type than int or string, call ToString() on the object and TryParse as int. Or use whatever handling of Active Properties found elsewhere in log4net.

        Issue Links

          Activity

          Hide
          Stefan Bodewig added a comment -

          fixed with svn revision 1169688

          Show
          Stefan Bodewig added a comment - fixed with svn revision 1169688
          Hide
          Ron Grabowski added a comment -

          Changed:

          string eventIDPropertyString = eventIDPropertyObj as string;

          to:

          string eventIDPropertyString;
          if (eventIDPropertyObj is string)

          { eventIDPropertyString = (string)eventIDPropertyObj; }

          else

          { eventIDPropertyString = eventIDPropertyObj.ToString(); }
          Show
          Ron Grabowski added a comment - Changed: string eventIDPropertyString = eventIDPropertyObj as string; to: string eventIDPropertyString; if (eventIDPropertyObj is string) { eventIDPropertyString = (string)eventIDPropertyObj; } else { eventIDPropertyString = eventIDPropertyObj.ToString(); }

            People

            • Assignee:
              Unassigned
              Reporter:
              Michael Christensen
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development