I don't think this is a correct test case. The ThreadContext.Properties["DateTimeTodayToString"] is not set until after the message is logged, therefore it is not in the context at the time of the log message and therefore won't be in the appender's output.
Nicko > -----Original Message----- > From: Ron Grabowski [mailto:[EMAIL PROTECTED] > Sent: 16 June 2006 05:21 > To: Log4NET User > Subject: RE: Logging Thread Context Properties > > Here's a failing test case for the problem you described. The > StringAppender has a value of "(null)" when it should have > the string representation of today's date. > > A similiar test case that launches the thread via the ThreadPool: > > ThreadPool.QueueUserWorkItem( > new WaitCallback(ExecuteBackgroundThreadPool), null); > > also fails. > > The TestThreadPropertiesPattern test from > log4net.Tests.Context.ThreadContextTest passes when the > property is added from the same thread. > > In my ASP.Net applications, I store the user's identification > information during Application_AuthenticateRequest in the > ThreadContext(?) and all my appenders have access to it. > > I'll look around some more... > > [Test] > public void TestBackgroundThreadContextProperty() > { > StringAppender stringAppender = new StringAppender(); > stringAppender.Layout = > new PatternLayout("%property{DateTimeTodayToString}"); > > ILoggerRepository rep = > LogManager.CreateRepository("BackgroundThreadRepository"); > > BasicConfigurator.Configure(rep, stringAppender); > > Thread thread = new Thread(new ThreadStart(ExecuteBackgroundThread)); > thread.Start(); > > Thread.CurrentThread.Join(2000); > } > > private void ExecuteBackgroundThread() > { > ILog log = LogManager.GetLogger( > "BackgroundThreadRepository", > "ExecuteBackgroundThread"); > > log.Info("TestMessage"); > > ThreadContext.Properties["DateTimeTodayToString"] = > DateTime.Today.ToString(); > > Repository.Hierarchy.Hierarchy hierarchyLoggingRepository = > (Repository.Hierarchy.Hierarchy)log.Logger.Repository; > > StringAppender stringAppender = > (StringAppender)hierarchyLoggingRepository.Root.Appenders[0]; > > Assert.AreEqual(DateTime.Today.ToString(), > stringAppender.GetString()); > } > > --- Wayne Bradney <[EMAIL PROTECTED]> wrote: > > > So, either I'm doing something so unbelievably stupid as to not > > warrant a response, or this is a real problem, right? > > > > > > > > WMB > > > > _____ > > > > From: Wayne Bradney [mailto:[EMAIL PROTECTED] > > Sent: Wednesday, June 07, 2006 6:05 PM > > To: Log4NET User > > Subject: Logging Thread Context Properties > > > > > > > > I must be missing something here... I'm trying to setup a thread > > property in my background thread such that my appender can > inspect the > > property when an event is logged: > > > > > > > > The thread does this: > > > > > > > > log4net.ThreadContext.Properties["ThreadTaskDescription"] = "<some > > string>"; > > > > log.Info("Some message"); > > > > > > > > > > > > In the appender, when I look at the Properties property of the > > LoggingEvent ("Some message"), it never has any properties at all. > > > > > > > > Am I doing this right? > > > > > > > > WMB > > > > > > > > > >
