Changement de log4net niveau d'enregistrement par programmation
Ceci est similaire à Six cent cinquante mille six cent quatre vingt quatorze mais aucune réponse n'a été accepté là, je ne peux pas obtenir un de ces suggestions de travail à tous, et je pense que je peut être dans une situation légèrement différente.
Je vais appeler log4net.Config.XmlConfigurator.Configurer(). Mais après ce point dans le programme, je veux changer la journalisation de seuil à une valeur connue seulement au moment de l'exécution.
De l'autre question, j'ai essayé:
((log4net.Repository.Hierarchy.Logger)mylogger.Logger).Level = log4net.Core.Level.Error;
et:
var appender = new log4net.Appender.ColoredConsoleAppender();
appender.Layout = new log4net.Layout.PatternLayout(@"%date %-5level %message%newline");
appender.Threshold = log4net.Core.Level.Error;
appender.ActivateOptions();
log4net.Config.BasicConfigurator.Configure(appender);
mais aucun des deux ne semble avoir aucun effet: je suis toujours de voir le DÉBOGAGE et l'INFO traces sur la console.
Mon intuition est que je suis l'ajout d'un nouveau appender, qui n'a pas d'effet sur l'appender déclaré dans le fichier XML de config (qui raconte l'impression niveau de DEBUG messages), mais je n'ai pas de preuves de cela encore.
J'ai été fouiller dans les log4net API pour un certain temps maintenant, et je ne suis pas le voir. Est-il quelque chose de simple, je suis absent?
- La fixation d'un Enregistreur de niveau "Erreur" éviter toute debug ou info sortie de l'enregistreur d'être connecté. Vous voyez le DÉBOGAGE et l'INFO pour le très Enregistreur dont le niveau de journalisation vous êtes en train de changer?
- C'est un bon point: #1 probablement seulement définit le seuil d'un bûcheron. Mais #2 semble comme il se doit d'être globale.
- Oui #1, seul le seuil de l'unique journal instance vous sont en train de changer, en plus de tout Enregistreur de niveau inférieur dans la hiérarchie qui n'a pas de définir explicitement niveau.
- J'ai essayé de parcourir l'ensemble de log4net.LogManager.GetCurrentLoggers() avec le n ° 1, et qui ne fait rien non plus. Et je pense toujours que #2 semble comme il se doit d'être globale.
- Pourriez-vous nous fournir votre log4net de configuration, il suffit de modifier dans la fin de votre question?
- Cette question de l'aide? stackoverflow.com/questions/738126/...
Vous devez vous connecter pour publier un commentaire.
Aucune de ces solutions ne présentons ici a fonctionné pour moi. Il n'était pas en train de changer à runtime
Voici ce qui a fonctionné pour moi:
Vous devez appeler RaiseConfigurationChanged après avoir fait des changements à sa config.
Enfin trouvé une solution qui fonctionne, ici.
Les grandes pièces ont été:
Grand merci à Eddie pour poser les bonnes questions embarrassantes, qui m'a conduit à google les mots justes. Je n'aurais jamais pensé que c'seul.
(Côté: Référentiel, de la Hiérarchie, Enregistreur, RootLogger, LevelMap -- je n'avais aucune idée qu'il était même possible de faire un enregistrement de la bibliothèque de ce complexe. Il y a environ 20 couches d'indirection, qui j'en suis sûr, fait-il assez souple pour rien, mais il est presque impossible de faire des choses simples comme "ne pas journaliser les messages au dessus du seuil de X". Gah!)
Il y a une façon simple de le faire:
Plus d'informations peuvent être trouvées ici.
Essayé toutes ces réponses et aucun d'entre eux travaillaient. Dans le débogueur j'ai pu voir que l'enregistreur de tous les niveaux, de la racine des niveaux, des seuils ont été fixés comme dirigé. Malgré cela, je n'ai pas vu le journal d'un changement de niveau dans les collines de fichier, j'ai été la journalisation à.
Puis j'ai trouvé que dans le fichier de configuration de l'appender d'un élément spécifié une valeur de seuil. Alors, quand j'ai voulu changer le niveau de Debug, tandis que l'appender a été fixé pour l'Avertir, par exemple, que appender ne pas ramasser d'autres messages comme ils étaient en dessous du seuil. J'ai donc enlevé le seuil de l'appender configuration et juste garder le niveau de configuration.
Puis j'ai fini à l'aide de Ken solution pour modifier le niveau d'exécution.
Je cherchais la même approche et a constaté que la dernière NLog version 3.2.0.0 donne ci-dessous l'option pour modifier le niveau de journalisation de l'exécution.
Je pense, une autre approche pourrait être d'utiliser
LogManager.Configuration
pour remplacer les paramètres de configuration à l'aide de variables.Si cela fonctionne pour quelqu'un, voici comment j'ai mis en place dans mon application web, un cardan niveau de l'extrémité exposée via un appel d'API, afin que je puisse modifier le niveau d'enregistrement à la volée.
Et le réel implementationt