Comment ouvrir une session dans le bon contexte, avec de pool de threads threads à l'aide de log4net?

Je suis en train d'essayer de trouver un moyen pour se connecter contexte utile à partir d'un tas de fils. Le problème est que beaucoup de code est traité sur les Événements qui sont arrivés par pool de threads les threads (pour autant que je puisse dire) de sorte que leurs noms ne sont pas en relation avec n'importe quel contexte. Le problème peut être démontré avec le code suivant:

class Program
{
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    static void Main(string[] args)
    {
        new Thread(TestThis).Start("ThreadA");
        new Thread(TestThis).Start("ThreadB");
        Console.ReadLine();
    }

    private static void TestThis(object name)
    {
        var nameStr = (string)name;
        Thread.CurrentThread.Name = nameStr;
        log4net.ThreadContext.Properties["ThreadContext"] = nameStr;
        log4net.LogicalThreadContext.Properties["LogicalThreadContext"] = nameStr;
        log.Debug("From Thread itself");
        ThreadPool.QueueUserWorkItem(x => log.Debug("From threadpool Thread: " + nameStr));
    }
}

La Conversion motif:

%date [%thread] %-5level %logger [%property] - %message%newline

La sortie est de la sorte:

2010-05-21 15:08:02,357 [ThreadA] DEBUG LogicalContextTest.Program [{LogicalThreadContext=ThreadA, log4net:HostName=xxx, ThreadContext=ThreadA}] - From Thread itself
2010-05-21 15:08:02,357 [ThreadB] DEBUG LogicalContextTest.Program [{LogicalThreadContext=ThreadB, log4net:HostName=xxx, ThreadContext=ThreadB}] - From Thread itself
2010-05-21 15:08:02,404 [7] DEBUG LogicalContextTest.Program [{log4net:HostName=xxx}] - From threadpool Thread: ThreadA
2010-05-21 15:08:02,420 [16] DEBUG LogicalContextTest.Program [{log4net:HostName=xxx}] - From threadpool Thread: ThreadB

Comme vous pouvez le voir les deux dernières lignes n'ont pas de Noms d'informations utiles pour distinguer les 2 fils, autre que d'ajouter manuellement le nom du message (qui je veux éviter). Comment puis-je obtenir le Nom/Contexte dans le journal pour le pool de threads les threads sans ajouter au message à chaque appel ou qui ont besoin pour définir la propriété de nouveau à chaque rappel.

  • D'autres Me - (en Ajoutant ce commentaire en espérant que vous recevrez une notification soit dans mon long commentaire ci-dessous) s'il vous Plaît voir mon commentaire/question à réponse pour votre 4 Nov 2010 commentaire de la réponse par @TskTsk
InformationsquelleAutor My Other Me | 2010-05-21