Log4j: Changement du niveau de journal par programme qui fonctionne pour à être créé bûcherons

Je déclare les bûcherons dans mon code comme ceci:

Logger logger = LoggerFactory.getLogger(MyClass.class);

Je voudrais être en mesure de modifier le niveau de journalisation de mon enregistreurs de par programme à l'exécution. J'ai essayé de parcourir les bûcherons dans le référentiel via le LogManager, mais il ne s'applique que le nouveau niveau de journal pour les bûcherons qui sont instanciés dans le code. Si un nouveau journal instance est créée, elle n'utilise pas le nouveau niveau de journal. Ma condition est telle que le niveau de journal dans mon application web doit être configurable par l'intermédiaire d'une Administration GUI, et ce nouveau niveau de journal doit s'appliquer à tous les enregistreurs dans mon code (à l'exclusion de la troisième partie de la bibliothèque de journalisation, par exemple, JSF, Spring, Hibernate, etc).

C'est ce que je fais aujourd'hui qui ne répondent pas à mes exigences, car il ne s'applique pas le niveau de journal nouvellement instancié enregistreurs:

Enumeration<Logger> currentLoggers = LogManager.getCurrentLoggers();
while(currentLoggers.hasMoreElements()) {
    Logger logger = currentLoggers.nextElement();
    if (StringUtils.startsWith(logger.getName(), "com.my.company")) {
        logger.setLevel(logLevel);
    }
}

Je suis à l'aide de Log4j 1.2.17.

  • Vous avez besoin de changer votre configuration log4j par programmation. Non seulement le déjà instancié Bûcherons. Voir stackoverflow.com/a/4598829/982149
  • double possible de l'Évolution dynamique de log4j niveau de log
  • Je ne suis toujours pas sûr de ce que la solution est après la lecture de ce post. Je ne peux pas faire LogManager.getRootLogger().setLevel(de Niveau.DEBUG); parce que cela va changer la racine de l'enregistreur, et qui affectent tous les niveaux de journal, y compris ceux de la 3ème partie des bibliothèques.
  • Mon log4j est un peu rouillé, mais je pense que vous pouvez définir le niveau de journalisation pour "com.mon.société" et il aura une incidence sur tous les enfants de Bûcherons. Je vais revenir à vous dans un Instant ...
  • N'ai pas trouver la ressource plus, mais comme à mon délavé mémoire LogManager.getLogger("com.my.company").setLevel(whateverloglevel) devrait faire le travail.
  • Qui semble avoir fonctionné. J'ai essayé au début, mais se sentait comme il ne fonctionnait pas. Peut-être que quelque chose était erronée. Maintenant, il semble fonctionner, merci! Si vous le publiez, comme réponse, je vais l'accepter.

InformationsquelleAutor citress | 2014-08-26