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.

Reply via email to