2010-11-30 31 views
38

L'exemple "Hello World" de SLF4J ne fonctionne pas pour moi. Je suppose que c'est parce que j'ai ajouté slf4j-log4 à mon classpath. Dois-je configurer log4j directement pour que le monde de Hello fonctionne?Comment obtenir SLF4J "Hello World" fonctionnant avec log4j?

log4j:WARN No appenders could be found for logger (HelloWorld). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 

Mise à jour: J'ai ajouté l'initialisation log4j, et il ne fonctionne toujours pas:

public static void main(String[] params) { 
     org.apache.log4j.Logger.getRootLogger().addAppender(new ConsoleAppender()); 
     Logger logger = org.slf4j.LoggerFactory.getLogger(TestBase.class); 
     logger.info("Hello World"); 
    } 

Et je reçois:

log4j:ERROR No output stream or file set for the appender named [null]. 
+1

Avez-vous lu ce lien? –

+0

@Michael, j'avoue que j'ai plus glissé que lu. Je vois qu'ils me demandent d'ajouter slf4j-simple.jar à mon classpath, mais je veux vraiment utiliser log4j. J'ai édité le titre de ma question en conséquence. – ripper234

+0

voulez-vous utiliser log4j ou slf4j sur log4j? –

Répondre

68

Si vous souhaitez utiliser slf4j simple , vous avez besoin de ces fichiers jar sur votre chemin de classe:

  • slf4j-api-1.6.1.jar
  • slf4j-simple 1.6.1.jar

Si vous souhaitez utiliser slf4j et log4j, vous avez besoin de ces jar fichiers sur votre classpath:

  • slf4j-api-1.6.1.jar
  • slf4j-log4j12-1.6.1.jar
  • log4j-1.2.16.jar

Pas plus, pas moins. En utilisant slf4j simple, vous obtiendrez la journalisation de base sur votre console au niveau INFO ou supérieur. En utilisant log4j, vous devez configure it accordingly.

+1

J'utilise slf4j avec log4j. J'ai inclus toutes les trois dépendances comme mentionné mais il montre toujours la même erreur. Sil te plait aide moi. Merci – user

0

J'ai eu le même problème. J'ai appelé mon propre enregistreur personnalisé dans le fichier log4j.properties du code lorsque j'utilise log4j api directement. Si vous utilisez les appels api SLF4J, vous utilisez probablement l'enregistreur racine par défaut, vous devez donc configurer que, pour être associé à un appender dans les log4j.properties:

 

    # Set root logger level to DEBUG and its only appender to A1. 
    log4j.rootLogger=DEBUG, A1 

    # A1 is set to be a ConsoleAppender. 
    log4j.appender.A1=org.apache.log4j.ConsoleAppender 

36

Voici un exemple. Vous pouvez voir les détails http://www.luyue.org/configure-slf4j-working-various-logging-frameworks et télécharger les codes complets here.

  • Ajouter à votre dépendance suivante pom si vous utilisez Maven, sinon, il suffit de télécharger les fichiers jar et mettre sur votre classpath

    <dependency> 
        <groupId>org.slf4j</groupId> 
        <artifactId>slf4j-api</artifactId> 
        <version>1.7.7</version> 
    </dependency> 
    
    <dependency> 
        <groupId>org.slf4j</groupId> 
        <artifactId>slf4j-log4j12</artifactId> 
        <version>1.7.7</version> 
    </dependency> 
    
  • Configurer log4j.properties

    log4j.rootLogger=TRACE, 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=%d{yyyy-MM-dd'T'HH:mm:ss.SSS} %-5p [%c] - %m%n 
    
  • Exemple Java

    public class Slf4jExample { 
        public static void main(String[] args) { 
    
         Logger logger = LoggerFactory.getLogger(Slf4jExample.class); 
    
         final String message = "Hello logging!"; 
         logger.trace(message); 
         logger.debug(message); 
         logger.info(message); 
         logger.warn(message); 
         logger.error(message); 
        } 
    } 
    
+3

le code réel par exemple rend cette meilleure réponse IMO – tbraun

+0

@ylu, avez-vous besoin de spécifier la portée de slf4j-log4j12 à tester? comme ici: https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12/1.7.25 –

+1

@MinnieShi si vous voulez seulement slf4j-log4j12 disponible pour les phases de compilation et d'exécution du test, vous pouvez spécifier la portée comme test . Si la portée n'est pas spécifiée comme ci-dessus, la portée par défaut est "compile" (ce qui signifie que la dépendance est disponible pour la compilation, l'exécution et le test). J'espère que cela aide. – ylu

3
you need to add 3 dependency (API+ API implementation + log4j dependency) 
Add also this 
<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-core</artifactId> 
    <version>2.5</version> 
</dependency> 

# And to see log in command line , set log4j.properties 

# Root logger option 
log4j.rootLogger=INFO, file, 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=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

#And to see log in file , set log4j.properties 
# Direct log messages to a log file 
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=./logs/logging.log 
log4j.appender.file.MaxFileSize=10MB 
log4j.appender.file.MaxBackupIndex=10 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n