web-dev-qa-db-fra.com

Comment activer Logger.debug () dans Log4j

En essayant d’exécuter les lignes suivantes, seules les deux dernières instructions sont affichées ("Voici quelques erreurs" et "Voici quelques erreurs") et les trois premières instructions ne sont pas affichées.Je venais de commencer à apprendre ce sujet. Pourquoi cela arrive-t-il?

    logger.debug("Here is some DEBUG");
    logger.info("Here is some INFO");
    logger.warn("Here is some WARN");
    logger.error("Here is some ERROR");
    logger.fatal("Here is some FATAL");

le log4j.property a

log4j.rootLogger=debug,stdout
log4j.appender.stdout=org.Apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.Apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%5p] %d{mm:ss}(%F:%M:%L)%n%m%n%n
46
Hariharbalaji

Vous avez probablement un fichier log4j.properties quelque part dans le projet. Dans ce fichier, vous pouvez configurer le niveau de sortie de débogage souhaité. Voir cet exemple:

log4j.rootLogger=info, console

log4j.appender.console=org.Apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.Apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

log4j.logger.com.example=debug

La première ligne définit le niveau de journalisation du journal racine sur "info", c’est-à-dire que seules info, warn, error et fatal seront imprimées sur la console (l’appender défini un peu plus bas).

La dernière ligne définit le consignateur pour com.example. * (Si vous obtenez vos consignateurs via LogFactory.getLogger(getClass())) sera au niveau de débogage, c’est-à-dire que le débogage sera également imprimé.

60
Thomas Lötzer

Voici un rapide hack d'une ligne que j'utilise occasionnellement pour activer temporairement la journalisation du débogage dans un test JUnit:

Logger.getRootLogger().setLevel(Level.DEBUG);
52
Stephen C

Mettez un fichier nommé log4j.xml dans votre chemin de classe. Le contenu est par exemple.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.Apache.org/log4j/">

    <appender name="stdout" class="org.Apache.log4j.ConsoleAppender">
        <layout class="org.Apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %t %c{1}:%L - %m%n"/>
        </layout>
    </appender>

    <root>
        <level value="debug"/>
        <appender-ref ref="stdout"/>
    </root>

</log4j:configuration>
9
yawn

Cela se produit probablement car votre configuration log4j est définie sur ERROR. Recherchez un fichier log4j.properties avec un contenu similaire à celui-ci:

log4j.rootLogger=ERROR, CONSOLE

# console logging
log4j.appender.CONSOLE=org.Apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.layout=org.Apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %-20.20t %-24c{1}: %m%n

Le rootLogger est défini sur le niveau ERROR à l'aide d'un appender CONSOLE.

Notez que certains appenders, comme l'appender console, ont également une propriété Threshold qui peut être utilisée pour remplacer le niveau rootLoggers. Vous devez vérifier les deux dans ce cas.

6
rsp

Si vous venez ici parce que vous utilisez Apache commons, journaliser avec log4j et que log4j ne fonctionne pas comme prévu, vérifiez que vous avez bien log4j.jar dans votre chemin d'accès aux classes au moment de l'exécution. Celui-là m'avait laissé perplexe pendant un petit moment. J'ai maintenant configuré le coureur dans mon environnement de développement pour inclure - Dlog4j.debug dans la ligne de commande Java) afin que je puisse toujours voir que Log4j est initialisé correctement.

5
Glenn Lawrence

Vous devez définir le niveau de consignateur au plus bas que vous souhaitez afficher. Par exemple, si vous souhaitez afficher les messages DEBUG, vous devez définir le niveau de journalisation sur DEBUG.

Le manuel d'Apache log4j comporte une section sur la configuration.

3
Thomas Owens

J'aime utiliser un appender de fichier en défilement pour écrire les informations de journalisation dans un fichier. Mon fichier de propriétés log4j ressemble généralement à ceci. Je préfère cette méthode, car j’aime effectuer une journalisation spécifique à un package au cas où j’ai besoin de divers degrés de journalisation pour différents packages. Un seul paquet est mentionné dans l'exemple.

log4j.appender.RCS=org.Apache.log4j.DailyRollingFileAppender
log4j.appender.RCS.File.DateFormat='.'yyyy-ww
#define output location
log4j.appender.RCS.File=C:temp/logs/MyService.log
#define the file layout
log4j.appender.RCS.layout=org.Apache.log4j.PatternLayout
log4j.appender.RCS.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm a} %5 %c{1}: Line#%L - %m%n
log4j.rootLogger=warn
#Define package specific logging
log4j.logger.MyService=debug, RCS
3
ChadNC

Cela est dû au fait que le niveau de consignation de votre enregistreur est défini sur "erreur". Par conséquent, vous ne verrez que les messages d'erreur ou supérieurs à ce niveau en termes de gravité. C'est pourquoi vous voyez également le message "irrécupérable".

Si vous définissez le niveau de journalisation sur 'debug' sur votre logger dans votre log4j.xml, tous les messages devraient s'afficher.

Jetez un coup d'œil à l'introduction log4j pour l'explication.

2
TomY