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 Ian Dykes <ia...@esendex.com> on 2006/04/21 17:18:14 UTC

Uncaught IndexOutOfRangeException in log4net 1.2.9 Beta

Hi,

We're in the process of updating our logging from version 1.2.0 beta 8 (DLL version 1.2.0.30714) to the 1.2.9 beta and are experiencing an uncaught error when our test system is placed under load.

We're running version 1.1 of the MS .Net framework on Windows 2003 Server, and have also seen this on Windows XP Pro SP2.

We have a server process which catches all exceptions and logs them as errors.  The stack trace we are getting is as follows:

ERROR[slf5s.PRIORITY]
(null)[slf5s.NDC]
2132[slf5s.THREAD]
com.esendex.ems.ScheduledSubmissionServer[slf5s.CATEGORY]
com.esendex.common.statusservice.Status.LogError(:0)[slf5s.LOCATION]
Error calling ProcessMessages[slf5s.MESSAGE]

System.IndexOutOfRangeException: Probable I/O race condition detected while copying memory.  The I/O package is not thread safe by default.  In multithreaded applications, a stream must be accessed in a thread-safe way, such as a thread-safe wrapper returned by TextReader's or TextWriter's Synchronized methods.  This also applies to classes like StreamWriter and StreamReader.

Server stack trace: 
   at System.Buffer.InternalBlockCopy(Array src, Int32 srcOffset, Array dst, Int32 dstOffset, Int32 count)
   at System.IO.StreamWriter.Write(Char[] buffer, Int32 index, Int32 count)
   at System.IO.TextWriter.WriteLine(String value)
   at System.IO.SyncTextWriter.WriteLine(String value)
   at log4net.Util.LogLog.Error(String message, Exception exception)
   at log4net.Util.AppenderAttachedImpl.AppendLoopOnAppenders(LoggingEvent loggingEvent)
   at log4net.Repository.Hierarchy.Logger.CallAppenders(LoggingEvent loggingEvent)
   at log4net.Repository.Hierarchy.Logger.ForcedLog(Type callerStackBoundaryDeclaringType, Level level, Object message, Exception exception)
   at log4net.Repository.Hierarchy.Logger.Log(Type callerStackBoundaryDeclaringType, Level level, Object message, Exception exception)
   at log4net.Core.LogImpl.Debug(Object message)
   at com.esendex.ems.datamappers.ScheduledSubmissionBatchDM.SelectBatchForDateTime(DateTime date)
   at com.esendex.ems.implementation.facades.ScheduledSubmissionFacadeImpl.GetBatchesToSubmit(DateTime date)
   at com.esendex.ems.facades.ScheduledSubmissionFacade.GetBatchesToSubmit(DateTime date)
   at System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(MethodBase mb, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
   at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at com.esendex.ems.facades.ScheduledSubmissionFacade.GetBatchesToSubmit(DateTime date)
   at com.esendex.ems.ScheduledSubmissionServer.ProcessMessages()
   at com.esendex.ems.ScheduledSubmissionServer.Run()

The server process is logging to one file, while the Debug line (the line "at log4net.Core.LogImpl.Debug(Object message)" in the stack trace) is meant to log to a different file (which other threads will be logging to).  The server code is in a DLL that is late loaded from the GAC by a host EXE program.  This is logging correctly as the above trace is from that log.  The server DLL then calls through to a COM+ component.  The COM+ component late loads an implementation assembly from the GAC.  It is the logging within this implementation DLL that is throwing the exception.

I'm logging to a log4net.Appender.RollingFileAppender with the following configuration:

<appender name="EsendexRollingFileAppender" type="log4net.Appender.RollingFileAppender">
	<param name="File" value="${log.dir.unix}/${namespace}.txt" />
	<param name="AppendToFile" value="true" />
	<param name="MaxSizeRollBackups" value="10" />
	<param name="MaximumFileSize" value="5000000" />
	<param name="RollingStyle" value="Size" />
	<param name="StaticLogFileName" value="true" />
	<layout type="log4net.Layout.PatternLayout">
		<param name="Header" value="---Start of session---\r\n" />
		<param name="Footer" value="---End of session---\r\n" />
		<param name="ConversionPattern" value="[slf5s.start]%d{DATE}[slf5s.DATE]%n%p[slf5s.PRIORITY]%n%x[slf5s.NDC]%n%t[slf5s.THREAD]%n%c[slf5s.CATEGORY]%n%l[slf5s.LOCATION]%n%m[slf5s.MESSAGE]%n%n" />
	</layout>
</appender>

(${log.dir.unix} and ${namespace} are other variables within the config file)

I've had a look around the known bugs with this version and haven't found a resolution to this.  We are not experiencing this problem with the older version 1.2.0 either.

Is there anything we can do to stop this exception being thrown?

Apologies if this is a known problem with a simple resolution, but I've been looking for a solution all day and haven't found anything.

Regards
Ian Dykes
 
-
 
Software Developer
Esendex Ltd
49 Stoney Street
Nottingham NG1 1LX
 
http://www.esendex.com
 
Tel: +44 (0) 115 959 7962
Fax: +44 (0) 115 959 7966
 
Esendex voted as one of O2's "50 To Watch In Mobile".  Read the full story at http://www.realbusiness.co.uk/mobile