2009-12-15 4 views
2

Comment puis-je définir le nom du thread de travail dans Quartz.net?Comment définir le nom du fil de travail Quartz.net?

[2009-12-15 08:56:25] [DefaultQuartzScheduler_Worker-1] INFO 

Je voulais voir des informations significatives dans les journaux. J'ai essayé d'utiliser JobDetail constructeur, mais on dirait que je me trompe.

var job = new JobDetail("n1", null, typeof (MyJob)); 

Répondre

1

Au moins, il n'y a aucun moyen de définir le nom du thread de travail. Cependant, j'ai utilisé la propriété% property de log4net pour produire un nom de thread significatif dans les fichiers journaux

0

Habituellement vous seriez intéressé par ce que la sortie de l'emploi (ils devraient avoir leurs propres bûcherons) et non intéressé par le fil.

Avez-vous un cas spécifique où vous avez besoin de noms logiques pour les threads? Les threads sont regroupés et il n'y a aucune garantie sur quel thread obtient quel type de travail à traiter. C'est pourquoi le nom du thread n'est généralement utilisable qu'à des fins de débogage pour suivre les événements survenus dans le cycle de vie d'un thread spécifique.

+2

Oui, c'est purement pour le but de débogage et aussi je pense que nommer ces threads (atleast préfixes) aiderait à vérifier les logs plus tard si quelque chose ne va pas – asyncwait

0

Ceci est une nouvelle réponse à une vieille question, mais peut-être son utile à quelqu'un.

Je n'ai pas aimé le long nom de fil de quartz [DefaultQuartzScheduler_Worker-1] dans mes fichiers journaux. Au lieu de cela, je voulais que log4net affiche l'identifiant du thread. Vous devez donc définir une propriété qui enregistre l'ID du thread actuel.

J'ai trouvé cette classe. source
Ceci est un lambda/func mode de journalisation contexte calculé: log4net context explained

public class Log4NetContextProperty : IFixingRequired 
{ 
    private readonly Func<string> _getValue; 

    public Log4NetContextProperty(Func<string> getValue) 
    { 
     _getValue = getValue; 
    } 

    public override string ToString() 
    { 
     return _getValue(); 
    } 

    public object GetFixedObject() 
    { 
     return ToString(); 
    } 
} 

Et vous devez l'appeler ainsi dans votre application commencer lieu. Ensuite, dans votre configuration log4net, adaptez le pattern de conversion pour inclure la nouvelle propriété. mine ressemble à ceci:

<conversionPattern value="%d{dd.MM.yyyy HH:mm:ss,ffff} %-5level [%property{threadId}] - %message%newline" /> 

Voilà. De cette façon, l'identifiant de chaque thread sera déterminé à l'exécution et connecté dans sa propre propriété.

Questions connexes