RollingFileAppenders that log to a network share from a web application fail to resume logging in the event the network share is disconnected/reconnected/failsover -------------------------------------------------------------------------------------------------------------------------------------------------------------------
Key: LOG4NET-103 URL: http://issues.apache.org/jira/browse/LOG4NET-103 Project: Log4net Issue Type: Bug Components: Appenders Affects Versions: 1.2.10, 1.2.9 Environment: Windows 2003, ASP.NET, C# Reporter: Kenneth Oberleitner We have seen an issue when logging from our web applications to a clustered SAN which fails over to a backup. I have recreated the scenario locally with two machines and writing a log file to a network share. 1) Enabled internal logging in log4net to a local file on MACHINE-C 2) Set up a share on MACHINE-B, and started a web application logging to that share from MACHINE-C; logs appeared on the share as expected 3) Disabled the share on MACHINE-B, refreshed the web application, the following error was reported in log4net's internal debugging log4net:ERROR [RollingFileAppender] Failed in DoAppend System.IO.IOException: The handle is invalid. at System.IO.__Error.WinIOError(Int32 errorCode, String str) at System.IO.FileStream.WriteCore(Byte[] buffer, Int32 offset, Int32 count) at System.IO.FileStream.FlushWrite() at System.IO.FileStream.Flush() at log4net.Appender.LockingStream.Flush() at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder) at System.IO.StreamWriter.Flush() at log4net.Util.TextWriterAdapter.Flush() at log4net.Appender.FileAppender.Append(LoggingEvent loggingEvent) at log4net.Appender.RollingFileAppender.Append(LoggingEvent loggingEvent) at log4net.Appender.AppenderSkeleton.DoAppend(LoggingEvent loggingEvent) 4) Re-enabled the share on MACHINE-B, refreshed the web application; no logging appeared in the shared log file, and the following error appeared in log4nets internal debugging log4net:ERROR [RollingFileAppender] Failed in DoAppend System.ObjectDisposedException: Cannot access a closed file. at System.IO.__Error.FileNotOpen() at System.IO.FileStream.Write(Byte[] array, Int32 offset, Int32 count) at log4net.Appender.LockingStream.Write(Byte[] buffer, Int32 offset, Int32 count) at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder) at System.IO.StreamWriter.Flush() at log4net.Util.TextWriterAdapter.Flush() at log4net.Appender.FileAppender.Append(LoggingEvent loggingEvent) at log4net.Appender.RollingFileAppender.Append(LoggingEvent loggingEvent) at log4net.Appender.AppenderSkeleton.DoAppend(LoggingEvent loggingEvent) 5) Touched web.config, refreshed the web application; no logging appeared in the shared log file, and the following errors appeared in log4net's internal debugging log4net: Hierarchy: Shutdown called on Hierarchy [log4net-default-repository] log4net:ERROR [RollingFileAppender] Could not close writer [log4net.Util.CountingQuietTextWriter] System.ObjectDisposedException: Cannot access a closed file. at System.IO.__Error.FileNotOpen() at System.IO.FileStream.Flush() at log4net.Appender.LockingStream.Flush() at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder) at System.IO.StreamWriter.Dispose(Boolean disposing) at System.IO.StreamWriter.Close() at log4net.Util.TextWriterAdapter.Close() at log4net.Util.QuietTextWriter.Close() at log4net.Appender.TextWriterAppender.CloseWriter() ... log4net:ERROR [RollingFileAppender] Unable to acquire lock on file \\MACHINE-B\Log\log-file.txt. The process cannot access the file "\\MACHINE-B\Log\log-file.txt" because it is being used by another process. log4net:ERROR [RollingFileAppender] OpenFile(\\MACHINE-B\Log\log-file.txt,True) call failed. LockStateException: The file is not currently locked at log4net.Appender.LockingStream.AssertLocked() at log4net.Appender.LockingStream.get_CanWrite() at System.IO.StreamWriter..ctor(Stream stream, Encoding encoding, Int32 bufferSize) at System.IO.StreamWriter..ctor(Stream stream, Encoding encoding) at log4net.Appender.FileAppender.OpenFile(String fileName, Boolean append) at log4net.Appender.RollingFileAppender.OpenFile(String fileName, Boolean append) at log4net.Appender.FileAppender.SafeOpenFile(String fileName, Boolean append) ... log4net:ERROR [RollingFileAppender] Unable to acquire lock on file \\MACHINE-B\Log\log-file.txt. The process cannot access the file "\\MACHINE-B\Log\log-file.txt" because it is being used by another process. log4net:ERROR [RollingFileAppender] OpenFile(\\MACHINE-B\Log\log-file.txt,True) call failed. LockStateException: The file is not currently locked at log4net.Appender.LockingStream.AssertLocked() at log4net.Appender.LockingStream.get_CanWrite() at System.IO.StreamWriter..ctor(Stream stream, Encoding encoding, Int32 bufferSize) at System.IO.StreamWriter..ctor(Stream stream, Encoding encoding) at log4net.Appender.FileAppender.OpenFile(String fileName, Boolean append) at log4net.Appender.RollingFileAppender.OpenFile(String fileName, Boolean append) at log4net.Appender.FileAppender.SafeOpenFile(String fileName, Boolean append) log4net:ERROR [RollingFileAppender] No output stream or file set for the appender named [AppRollingFileAppender]. 6) Performed an iisreset; logging then appeared in the shared log and no errors in the log4net internal debugging -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira