2010-11-19 4 views
1

J'ai sélectionné quelques endroits dans mon application où je voudrais toujours valeurs de journal. Je pourrais simplement employer Log.Info() et le laisser à cela, mais je préférerais une solution qui ne peut pas être désactivée par un changement accidentel à la configuration de niveau. Dans ce cas, tant que log4net n'est pas désactivé, je souhaite que ces instructions soient activées.Utilisation de log4net pour toujours enregistrer une valeur

Quelle est la meilleure approche? Il suffit de regarder someinformation Il semble qu'une option est de créer un niveau personnalisé avec une valeur définie au-dessus de l'urgence, mais je ne sais pas si c'est un hack brutalement horrible avec des effets secondaires que je ne réalise pas ou légitime option. Je n'ai trouvé aucune indication claire dans la documentation.

+0

Avez-vous essayé ma réponse? Cela a-t-il aidé? – wageoghe

Répondre

0

Je ne suis pas un expert en log4net, mais quelque chose comme cela pourrait faire ce que vous voulez:

Ce code recevra un enregistreur nommé de la LogManager et se programme mis à son niveau « ALL ». Si vous récupérez ce journal plus tard dans votre code, il se connectera toujours, même si le niveau de journalisation est défini sur OFF dans le fichier de configuration.

Pour tester, définissez le niveau de journalisation racine sur « OFF » dans le fichier de configuration, puis utilisez le code ci-dessous:

log4net.ILog log = log4net.LogManager.GetLogger("abc"); 
    log.Info("this won't log because root logger is OFF"); 

    //Reset the level 
    log4net.Repository.Hierarchy.Logger l = (log4net.Repository.Hierarchy.Logger)log.Logger; 

    l.Level = l.Hierarchy.LevelMap["ALL"]; 

    //Try to log again 
    log.Info("this will log because we just reset abc's level to ALL"); 

Je l'ai testé et il ne semble fonctionner. J'ai trouvé cette information here et here.

Questions connexes