LoggingEvent m_cacheUpdatable is useless and even produce an unexpected behavior --------------------------------------------------------------------------------
Key: LOG4NET-239 URL: https://issues.apache.org/jira/browse/LOG4NET-239 Project: Log4net Issue Type: Bug Affects Versions: 1.2.10 Environment: .Net 2.0 Reporter: François Dumont I already notify my problem on the mailing but as I had no answer I finally prefered to report it here. Rather than copy/paste my mail I prefered to write a test that has to be added to the BufferingAppenderTest: [Test, Description("Check that use of the BufferingAppender shall not change the rendering of the log event.")] public void TestAppenderSkeletonBehavior() { SetupRepository(); ObserverAppender observer = new ObserverAppender(); m_bufferingForwardingAppender.AddAppender(observer); ILogger logger = m_hierarchy.GetLogger("test"); logger.Log(typeof(BufferingAppenderTest), Level.Warn, "Message", new Exception("Exception")); Assert.AreEqual(1, observer.EventsCount); LoggingEvent loggingEvent1 = observer.Dequeue(); // Lets see what happen if we do not fix the exception part of the logging event at the // buffering forwarding appender level and let underlying appenders deal with it: m_bufferingForwardingAppender.Fix ^= FixFlags.Exception; logger.Log(typeof(BufferingAppenderTest), Level.Warn, "Message", new Exception("Exception")); Assert.AreEqual(1, observer.EventsCount); LoggingEvent loggingEvent2 = observer.Dequeue(); // The two logging events shall be similar: Assert.AreEqual(loggingEvent1.Level, loggingEvent2.Level); Assert.AreEqual(loggingEvent1.Domain, loggingEvent2.Domain); // Lets check the appender skeleton behavior: it normally renders the exception string info // if the layout do not do so invoking the GetExceptionString method. Assert.IsNotNull(loggingEvent1.GetExceptionString(), "Missing exception information when buffering appender fix it !"); Assert.IsNotNull(loggingEvent2.GetExceptionString(), "Missing exception information when buffering appender do not fix it !"); } This test needs this following small appender implementation to work: internal sealed class ObserverAppender : AppenderSkeleton { private readonly Queue<LoggingEvent> loggingEvents; public int EventsCount { get { return this.loggingEvents.Count; } } public ObserverAppender() { this.loggingEvents = new Queue<LoggingEvent>(); } protected override void Append(LoggingEvent loggingEvent) { this.loggingEvents.Enqueue(loggingEvent); } public LoggingEvent Dequeue() { return this.loggingEvents.Dequeue(); } } For info I try to comment m_cacheUpdatable = false and notice no regression when running tests. I would really be interested in knowing what this flag is for ? Thanks -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.