Index: src/log4net.Tests/Appender/RollingFileAppenderTest.cs
===================================================================
--- src/log4net.Tests/Appender/RollingFileAppenderTest.cs (revision 1710478)
+++ src/log4net.Tests/Appender/RollingFileAppenderTest.cs (working copy)
@@ -1397,6 +1397,10 @@
/// A configured ILogger
private static ILogger CreateLogger(string filename, FileAppender.LockingModelBase lockModel, IErrorHandler handler)
{
+ return CreateLogger(filename, lockModel, handler, 100000, 0);
+ }
+ private static ILogger CreateLogger(string filename, FileAppender.LockingModelBase lockModel, IErrorHandler handler, int maxFileSize, int maxSizeRollBackups)
+ {
Repository.Hierarchy.Hierarchy h = (Repository.Hierarchy.Hierarchy)LogManager.CreateRepository("TestRepository");
RollingFileAppender appender = new RollingFileAppender();
@@ -1404,9 +1408,10 @@
appender.AppendToFile = false;
appender.CountDirection = 0;
appender.RollingStyle = RollingFileAppender.RollingMode.Size;
- appender.MaxFileSize = 100000;
+ appender.MaxFileSize = maxFileSize;
appender.Encoding = Encoding.ASCII;
appender.ErrorHandler = handler;
+ appender.MaxSizeRollBackups = maxSizeRollBackups;
if (lockModel != null)
{
appender.LockingModel = lockModel;
@@ -1686,6 +1691,28 @@
AssertFileEquals(filename, "This is a message" + Environment.NewLine + "Test" + Environment.NewLine + "This is a message 2" + Environment.NewLine);
Assert.AreEqual("", sh.Message, "Unexpected error message");
}
+
+ ///
+ /// Verifies that rolling file works
+ ///
+ [Test]
+ public void TestInterProcessLockRoll()
+ {
+ String filename = "test.log";
+ bool locked;
+
+ SilentErrorHandler sh = new SilentErrorHandler();
+ ILogger log = CreateLogger(filename, new FileAppender.InterProcessLock(), sh, 1, 2);
+
+ Assert.DoesNotThrow(delegate { log.Log(GetType(), Level.Info, "A", null); });
+ Assert.DoesNotThrow(delegate { log.Log(GetType(), Level.Info, "A", null); });
+
+ DestroyLogger();
+
+ AssertFileEquals(filename, "A" + Environment.NewLine);
+ AssertFileEquals(filename + ".1", "A" + Environment.NewLine);
+ Assert.IsEmpty(sh.Message);
+ }
#endif
///
Index: src/log4net/Appender/FileAppender.cs
===================================================================
--- src/log4net/Appender/FileAppender.cs (revision 1710478)
+++ src/log4net/Appender/FileAppender.cs (working copy)
@@ -647,7 +647,6 @@
public class InterProcessLock : LockingModelBase
{
private Mutex m_mutex = null;
- private bool m_mutexClosed = false;
private Stream m_stream = null;
///
@@ -678,8 +677,7 @@
.Replace(":", "_")
.Replace("/", "_");
- m_mutex = new Mutex(false, mutextFriendlyFilename);
- m_mutexClosed = false;
+ m_mutex = new Mutex(false, mutextFriendlyFilename);
}
catch (Exception e1)
{
@@ -704,7 +702,7 @@
finally {
m_mutex.ReleaseMutex();
m_mutex.Close();
- m_mutexClosed = true;
+ m_mutex = null;
}
}
@@ -737,7 +735,7 @@
///
public override void ReleaseLock()
{
- if (m_mutexClosed == false && m_mutex != null)
+ if (m_mutex != null)
{
m_mutex.ReleaseMutex();
}