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.


Reply via email to