Как получить SLF4J "Hello World", работающий с log4j?
Пример "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].
Ответы
Ответ 1
Если вы хотите использовать slf4j simple
, вам нужны эти файлы jar
в вашем пути к классам:
- SLF4J-апи-1.6.1.jar
- slf4j-simple-1.6.1.jar
Если вы хотите использовать slf4j
и log4j
, вам нужны эти файлы jar
в вашем пути к классам:
- SLF4J-апи-1.6.1.jar
- slf4j-log4j12-1.6.1.jar
- log4j-1.2.16.jar
Не больше, не меньше. Используя slf4j simple
, вы получите базовую регистрацию в консоли на уровне INFO
или выше. Используя log4j
, вы должны настроить его соответственно.
Ответ 2
Ниже приведен пример. Вы можете увидеть подробности http://www.luyue.org/configure-slf4j-working-various-logging-frameworks и загрузить полные коды здесь.
-
Добавьте следующую зависимость к вашему pom, если вы используете maven, иначе просто загрузите файлы jar и поместите свой путь к классам
<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
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
Ответ 4
У меня была та же проблема. Я вызвал собственный собственный регистратор в файле log4j.properties из кода при непосредственном использовании log4j api. Если вы используете вызовы slf4j api, вы, вероятно, используете корневой журнал регистрации по умолчанию, поэтому вы должны настроить его для связи с приложением в 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