web-dev-qa-db-fra.com

Comment faire fonctionner SLF4J "Hello World" avec log4j?

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

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 cela 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].
49
ripper234

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 fichiers jar sur votre chemin de classe:

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

Ni plus ni moins. En utilisant slf4j simple, vous obtiendrez une connexion de base à votre console au niveau INFO ou supérieur. En utilisant log4j, vous devez le configurer en conséquence .

74
darioo

Voici un exemple. Vous pouvez voir les détails http://jkssweetlife.com/configure-slf4j-working-various-logging-frameworks/ et télécharger les codes complets ici .

  • Ajoutez la dépendance suivante à votre pom si vous utilisez maven, sinon, téléchargez simplement les fichiers jar et mettez votre chemin de classe

    <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);
        }
    }
    
44
ylu
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
3
Shantonu

J'ai eu le même problème. J'ai appelé mon propre enregistreur personnalisé dans le fichier log4j.properties à partir du code lors de l'utilisation directe de l'api log4j. Si vous utilisez les appels api slf4j, vous utilisez probablement l'enregistreur racine par défaut, vous devez donc le configurer pour qu'il soit associé à un appender dans log4j.properties:

 
 # Définissez le niveau de l'enregistreur racine sur DEBUG et son seul appender sur A1. 
 Log4j.rootLogger = DEBUG, A1 
 
 # A1 est défini être un ConsoleAppender. 
 log4j.appender.A1 = org.Apache.log4j.ConsoleAppender 
 
0
Lund Wolfe