Как заставить SLF4J "Hello World" работать с log4j? - PullRequest
47 голосов
/ 30 ноября 2010

Пример "Hello World" из SLF4J не работает для меня. Я думаю, это потому, что я добавил slf4j-log4 в мой путь к классам. Должен ли я настроить log4j напрямую, чтобы работал hello world?

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.

Обновление : я добавил инициализацию log4j, и она все еще не работает:

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");
    }

И я получаю:

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

Ответы [ 4 ]

73 голосов
/ 30 ноября 2010

Если вы хотите использовать slf4j simple, вам понадобятся эти jar файлы на вашем пути к классам:

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

Если вы хотите использовать slf4j и log4j, вам понадобятся следующие файлы jar на вашем пути к классам:

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

Не больше, не меньше.Используя slf4j simple, вы получите базовое ведение журнала на консоли на уровне INFO или выше.Используя log4j, вы должны настроить его соответственно .

42 голосов
/ 09 июля 2014

Ниже приведен пример. Вы можете посмотреть детали http://jkssweetlife.com/configure-slf4j-working-various-logging-frameworks/ и загрузить полные коды здесь .

  • Добавьте следующую зависимость к вашему pom, если вы используете maven, в противном случае просто скачайте jar-файлы и поместите в свой 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>
    
  • Настроить 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
    
  • Пример 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 голосов
/ 22 февраля 2016
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
0 голосов
/ 03 марта 2014

У меня была такая же проблема.Я вызвал свой собственный регистратор в файле log4j.properties из кода при непосредственном использовании log4j api.Если вы используете API-вызовы slf4j, вы, вероятно, используете корневой логгер по умолчанию, поэтому вы должны настроить его для связи с appender в 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

...