2010-07-24 6 views
2

Étant donné deux appenders: A1, A2 et enregistreurs multiples dont une est L1Comment définir des niveaux spécifiques enregistreur par appender dans Log4Net

Est-il possible de configurer log4net tel que:

A1 obtient DEBUG et au-dessus de tous les enregistreurs sauf L1, pour lequel il obtient INFO et au-dessus
A2 obtient DEBUG et au-dessus de tous les enregistreurs

J'ai regardé seuil appender, les filtres, et toutes les autres combinaisons de configuration, je peux penser, mais aucun d'entre les semblent pour accomplir ce qui précède.

Répondre

1

Vous pouvez effectuer les opérations suivantes:

  1. Définissez vos deux appenders (A1, A2) sans aucun filtre
  2. Créer un BufferingForwardingAppender, qui transmet à A1 et filtre au niveau> = INFO
  3. Créer un Buf feringForwardingAppender, qui transmet à A2 (pas de filtre ou> = debug)
  4. Configuration de l'enregistreur de racine à utiliser appenders A1, A2
  5. Configuration de l'enregistreur L1 à pas hérité appenders (additivité = false); référence les deux BufferingForwardingAppender à la place

Je ne l'ai pas testé, mais je ne vois pas pourquoi cela ne fonctionnerait pas.

+0

Merci Stefan, cette solution a atteint le résultat souhaité. J'ai seulement besoin d'un BufferingForwardingAppender supplémentaire puisque le L1 peut directement référencer A2. – markee

+0

oui bien sûr ... bête que je n'ai pas vu ça –

0

Selon les docs:

Filtres forment une chaîne que l'événement doit passer à travers. Tout filtre en cours de route peut accepter l'événement et arrêter le traitement, refuser l'événement et arrêter le traitement ou autoriser l'événement au filtre suivant. Si l'événement arrive à la fin de la chaîne de filtrage sans être refusé, il est implicitement accepté et sera consigné.

Il semble donc que quelque chose comme ça fonctionnerait (pseudo-code non testé):

A1 
    Level >= INFO: Accept 
    Logger == L1: Deny 
    Level >= DEBUG: Accept 
    DenyAll 

A2 
    Level >= DEBUG: Accept 
+0

J'ai essayé ceci, mais le filtre DenyAll à la fin de A1 a empêché quoi que ce soit d'être journalisé. J'ai supprimé la ligne DenyAll et A1 a obtenu DEBUG pour tous les autres enregistreurs mais rien du tout de L1. Je pense que le refus sur l'enregistreur L1 relève de la déclaration «refuser l'événement et arrêter le traitement» des documents. Cela dit, même si cela n'a pas résolu ce problème, j'apprécie votre suggestion. – markee

Questions connexes