web-dev-qa-db-fra.com

Comment déterminer quelle source de configuration de journal Logback est réellement utilisée?

log4j a une propriété, log4j.debug, qui fournira utilement à l'utilisateur une indication du fichier de configuration réellement utilisé pour configurer le système de journalisation.

Je n'ai pas été en mesure de trouver quoi que ce soit d'équivalent avec le cadre de journalisation Logback (autrement supérieur). Existe-t-il un moyen d’imprimer (à des fins de diagnostic) au moment de l’exécution, le fichier de configuration utilisé par Logback pour s’amorcer?

[edit] Pour clarifier, j'aimerais idéalement une solution qui ne nécessite pas de modifier le fichier de configuration lui-même (puisqu'un fichier JAR tiers mal assemblé, par exemple, peut être récupéré de manière incorrecte et avant la configuration de mon journal. XML).

26
Peter Mularien

Vous pouvez définir une propriété système Java pour générer les informations de débogage Logback:

Java -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener

Ceci est expliqué plus en détail dans la documentation de Logback pour l’impression automatique de l’état (les mentions tout en bas forcent la sortie de l’état), et la propriété logback.statusListenerClass :

En l'absence de messages d'état, il peut être difficile de rechercher un fichier de configuration non autorisé logback.xml, en particulier en production où la source de l'application ne peut pas être modifiée facilement. Pour vous aider à identifier l'emplacement d'un fichier de configuration non autorisé, vous pouvez définir un StatusListener via la propriété système "logback.statusListenerClass" (définie ci-dessous) pour forcer la sortie des messages d'état. La propriété système "logback.statusListenerClass" peut également être utilisée pour désactiver la sortie générée automatiquement en cas d'erreur.

21
Michael R

Si vous voulez aller profond dans Logback, vous pouvez faire ce qui suit

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.joran.util.ConfigurationWatchListUtil;

public class Main {

    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) throws Exception {
        LoggerContext loggerContext = ((ch.qos.logback.classic.Logger)logger).getLoggerContext();
        URL mainURL = ConfigurationWatchListUtil.getMainWatchURL(loggerContext);
        System.out.println(mainURL);
        // or even
        logger.info("Logback used '{}' as the configuration file.", mainURL);
    }
}

Il imprimera la URL du fichier de configuration chargé.

23

vous pouvez définir debug = "true" dans un fichier loback.xml que vous contrôlez comme ceci

<configuration debug="true">

(...)

</configuration

et assurez-vous que le fichier sera utilisé par logback, ajoutez l'argument suivant VM lorsque vous démarrez votre programme: 

-Dlogback.configurationFile=/path/to/yourlogback.xml

Cela ne répond pas vraiment à votre question mais vous donne une solution de contournement.

7
Frederic Close

Pas très scientifique, mais ça marche si vous voulez juste une confirmation rapide.

J'ai simplement changé le modèle d'entrée de journal et observé si cela avait changé ou non dans mon fichier console/journal.

0
Kenny Cason