web-dev-qa-db-fra.com

Journalisation slf4j avec jdk - comment activer le débogage?

Par défaut, slf4j, lors de l'utilisation avec jdk (slf4j-jdk14-1.6.1.jar), ne consigne pas les messages de débogage. Comment puis-je les activer?

Je ne trouve aucune information ni dans les documents officiels, ni sur le Web, ni ici sur la façon de l'activer.

J'ai trouvé quelques informations sur (échoué cependant) la création d'un fichier dans% JDK_HOME%/lib et la définition du niveau là-bas, dans un fichier de configuration. Cependant, je voudrais définir le niveau au moment de la compilation/exécution afin que je puisse à la fois exécuter et déboguer mon application à partir de mon IDE avec différents niveaux de journalisation).

N'y a-t-il pas une variable d'environnement que je peux définir, ou VM arg?

22
Kissaki

Pourquoi pensez-vous qu'il n'enregistre pas les messages DEBUG?

Si vous voulez dire que vos appels de journalisation log.debug(String) ne se retrouvent pas dans les fichiers journaux Java.util.logging, Je suppose que vous devez configurer le fichier de configuration logging.properties Pour autoriser les messages de journal à FINE niveau.

Si vous ne voulez pas jouer avec le %JRE_HOME%/lib/logging.properties Global, vous pouvez simplement passer -Djava.util.logging.config.file=logging.properties Sur la ligne de commande - cela forcera le système de journalisation à rechercher ce fichier de configuration dans le répertoire en cours .

Ou utilisez une autre méthode (programmatique) pour configurer Java.util.logging, Voir ci-dessous pour le tutoriel.

Cela n'a rien à voir avec la configuration de SLF4J; en fait, SLF4J n'a pas de configuration, tout est configuré en échangeant simplement les fichiers JAR.


Pour votre référence:

24
Neeme Praks

Si vous utilisez l'implémentation slf4j SimpleLogger, lisez ceci .

Là, vous pouvez voir que simpleLogger utilise INFO comme niveau de journal par défaut. Vous pouvez le modifier en utilisant une propriété système. Ceci est utile pour les environnements hors production:

static {

    System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "trace");
}
9
KingQuercus

Je viens de mettre mon fichier logging.properties dans mon fichier d'applications WEB-INF/classes (ou d'utiliser l'argument de ligne de commande identifié par Neeme Praks si vous ne déployez pas dans une guerre) et d'avoir le fichier de propriétés ouvert dans Eclipse afin que je puisse affinez-le pour enregistrer les packages et au niveau qui m'intéresse.

Dans le fichier logging.properties, vous devez vous assurer que le niveau d'enregistrement et le niveau de gestionnaire sont définis au niveau souhaité. Par exemple, si vous souhaitez que votre sortie soit envoyée à la console, vous devez au moins disposer des éléments suivants:

#logging.properties file contents

#Define handlers
handlers=Java.util.logging.ConsoleHandler

#Set handler log level
Java.util.logging.ConsoleHandler.level=FINE

#Define your logger level
com.company.application.package.package.level=FINE

#Assign your handler to your logger
com.company.application.package.package.handlers=Java.util.logging.ConsoleHandler

Vous avez mentionné le slf4j-jdk14-1.6.1.jar. Cela fournit la liaison slf4j à Java.util.logging. Vous devez l'avoir dans votre chemin de classe, mais assurez-vous également d'avoir l'api slf4j (slf4j-api-1.7.12.jar) dans votre chemin de classe également.

Je trouve l'exemple de fichier logging.properties dans ce lien utile pour créer une variété de consignateurs et de gestionnaires, pour vous donner un contrôle précis sur quels journaux vont à la console et quels journaux vont à un fichier :.

Et voici le manuel slf4j .

4
Jibby

Vous pouvez ajouter -Dorg.slf4j.simpleLogger.defaultLogLevel=debug aux options VM.

0
Antoine

si vous utilisez lombok Slf4j

 package com.space.slf4j;

    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;

    /**
     * @author anson
     * @date 2019/6/18 16:17
     */
    @Slf4j
    @RestController
    public class TestController {

        @RequestMapping("/log")
        public String testLog(){
            log.info("#########  info  #########");
            log.debug("#########  debug  #########");
            log.error("#########  error  #########");
            return null;
        }
    }

application.yml

logging:
   level:
      root: debug
0
anson