Good morning. As I understood your problem and the way log4net (and other log4*) works, a logger is identified by its name, which is passed into the LogManager.GetLogger(type) constructor delegator. Log4net then instantiates exactly this one logger and gives you back the instance in future calls. If you use it multiple times across different classes, you have of course the same instance of the logger across these different classes.
So, to fix this problem, I would recommend using log4net as it was designed and try one of these two things: * do a LogManager.GetLogger(type) across the classes, hold there a instance for this class in a static variable and pass it to the log helper. This actually renders the log helper pretty useless, but it works. * Implement the log helper as a wrapper and provide a constructor method just like the LogManager.GetLogger(type) does. You may even provide a interface that your helper implements. That way you would be able to switch helper and implementation transparently and change logging facility in the future. * You can of course implement the second attempt so that it automatically detects which class called the method and therefore looking up your class for itself. Refer to c# reflections and examine the callstack in .NET. Note that these operations cost a lot of performance. Greetings, D. -----Ursprüngliche Nachricht----- Von: MK Pandey (JIRA) [mailto:[email protected]] Gesendet: Montag, 26. April 2010 06:56 An: [email protected] Betreff: [jira] Updated: (LOG4NET-256) log4net With MDC is not exactly threadsafe? [ https://issues.apache.org/jira/browse/LOG4NET-256?page=com.atlassian.jira.pl ugin.system.issuetabpanels:all-tabpanel ] MK Pandey updated LOG4NET-256: ------------------------------ Attachment: bug detals mail.jpg > log4net With MDC is not exactly threadsafe? > ------------------------------------------- > > Key: LOG4NET-256 > URL: https://issues.apache.org/jira/browse/LOG4NET-256 > Project: Log4net > Issue Type: Bug > Components: Core > Affects Versions: 1.2.10 > Environment: Windows Server 2003, Windows XP > Reporter: MK Pandey > Attachments: bug detals mail.jpg > > > Hi All, > Our situation is that we are using MDC values (ex, transID) to set additional values which is used across multiple classes to identify the transaction. > We have one LogHelper class which creates private static instance of the as below: > log4net.ILog fileLogger = LogManager.GetLogger(GetType()); > When second thread starts and modifies the values, the subsequent logs from other threads start using the same values. > Any suggestions? > When using web.config file for appender defintion, is this not thread safe? -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.
