You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-dev@logging.apache.org by "David Perlman (JIRA)" <ji...@apache.org> on 2012/11/12 13:53:12 UTC
[jira] [Created] (LOG4NET-363) System.ObjectDisposedException
thrown in log4net.Layout.XmlLayoutSchemaLog4j.FormatXml ln 47
David Perlman created LOG4NET-363:
-------------------------------------
Summary: System.ObjectDisposedException thrown in log4net.Layout.XmlLayoutSchemaLog4j.FormatXml ln 47
Key: LOG4NET-363
URL: https://issues.apache.org/jira/browse/LOG4NET-363
Project: Log4net
Issue Type: Bug
Components: Appenders
Affects Versions: 1.2.11
Environment: IIS 7.0
Reporter: David Perlman
Priority: Minor
On line 47 in XmlLayoutSchemaLog4j there is a reference to the LoggingEvent.Identity property. If this call is made after the web request is finished (from a different thread) the logger throws (below the exception is my sad workaround):
log4net:ERROR [UdpAppender] ErrorCode: WriteFailure. Unable to send logging event to remote host ------- on port ----.
System.ObjectDisposedException: Safe handle has been closed
at System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean& success)
at Microsoft.Win32.Win32Native.GetTokenInformation(SafeTokenHandle TokenHandle, UInt32 TokenInformationClass, SafeLocalAllocHandle TokenInformation, UInt32 TokenInformationLength, UInt32& ReturnLength)
at System.Security.Principal.WindowsIdentity.GetTokenInformation(SafeTokenHandle tokenHandle, TokenInformationClass tokenInformationClass)
at System.Security.Principal.WindowsIdentity.get_User()
at System.Security.Principal.WindowsIdentity.GetName()
at System.Security.Principal.WindowsIdentity.get_Name()
at log4net.Core.LoggingEvent.get_Identity()
at log4net.Layout.XmlLayoutSchemaLog4j.FormatXml(XmlWriter writer, LoggingEvent loggingEvent)
at log4net.Layout.XmlLayoutBase.Format(TextWriter writer, LoggingEvent loggingEvent)
at log4net.Appender.AppenderSkeleton.RenderLoggingEvent(LoggingEvent loggingEvent)
at log4net.Appender.UdpAppender.Append(LoggingEvent loggingEvent)
Workaround -----
// translate identity name
// When logging on a thread that continues (asynchronously) after the web request is finished this will throw the logging
try
{
if (loggingEvent.Identity != null &&
loggingEvent.Identity.Length > 0 &&
loggingEvent.LookupProperty(LoggingEvent.IdentityProperty) == null)
{
loggingEvent.GetProperties()[LoggingEvent.IdentityProperty] = loggingEvent.Identity ?? "identity lost";
}
}
catch { }
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira