Я создал простой проект maven, в который добавил logback-classic, logback-core версии 1.5.3 и slf4j-api 2.0.12 с JDK11. Но когда я запускаю свой основной класс, я получаю это предупреждение/сообщение об ошибке.
**SLF4J(W): Поставщики SLF4J не найдены. SLF4J(W): по умолчанию используется реализация журнала без операций (NOP). SLF4J(W): См. https://www.slf4j.org/codes.html#noProviders для получения более подробной информации. Привет, мир! **
Структура папок: введите сюда описание изображения
В pom.xml я добавил зависимость классической версии logback-core, версии logback-core и slf4j-api.
pom.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.logbacklearn</groupId>
<artifactId>mavenproj</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mavenproj</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.12</version>
</dependency>
<dependency>
<groupId>ch.qos.logback.access</groupId>
<artifactId>common</artifactId>
<version>2.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.5.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.5.3</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-examples -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-examples</artifactId>
<version>1.2.13</version>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Мой logback.xml выглядит так
<?xml version = "1.0" encoding = "UTF-8" ?>
<configuration scan = "true" scanPeriod = "3 seconds">
<statusListener class = "ch.qos.logback.core.status.OnConsoleStatusListener"/>
<appender name = "STDOUT"
class = "ch.qos.logback.core.ConsoleAppender">
<layout class = "ch.qos.logback.classic.PatternLayout">
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{32} - %msg%n
</pattern>
</layout>
</appender>
<appender name = "FILE"
class = "ch.qos.logback.core.rolling.RollingFileAppender">
<File>logFile.log</File>
<rollingPolicy
class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>
logFile.%d{yyyy-MM-dd_HH-mm}.log.zip
</FileNamePattern>
</rollingPolicy>
<layout class = "ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{HH:mm:ss,SSS} [%thread] %-5level %logger{32} - %msg%n
</Pattern>
</layout>
</appender>
<root>
<level value = "DEBUG"/>
<appender-ref ref = "STDOUT"/>
<appender-ref ref = "FILE"/>
</root>
<!--<include file = "/tmp/logback-demo.xml"/>-->
</configuration>
Мой основной класс выглядит так:
package com.logbacklearn.mavenproj;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Hello world!
*
*/
public class App
{
static org.slf4j.Logger logger = LoggerFactory.getLogger(App.class);
public static void main( String[] args )
{
System.out.println( "Hello World!" );
logger.info("logger is working");
}
}
Когда я отлаживаю значение для регистратора, он показывает мне NOPLogger, хотя я добавил к нему зависимость logback-core, logback-classic. введите сюда описание изображения
Журналы не печатаются на консоли? Я что-то упускаю из более новой версии logback или slf4j?
Я попробовал пару вещей, например, снова выполнить чистую установку mvn. Создание целевой папки заново. Каким-то образом он не распознает зависимость logback-classic jar.
Кроме того, я впервые вижу, что jar classic и junit под зависимостями maven выделены серым цветом. В чем причина этого? введите сюда описание изображения
Выглядит неплохо. Убедитесь, что сборка прошла успешно.
Да. Сборка также становится успешной. Но логи не печатаются. В документации slf4j я видел одну вещь: они используют механизм ServiceLoader из версии 2.0.x. slf4j.org/codes.html#noProviders
Упомянутое вами предупреждение рассказывает следующую историю:
SLF4J(W): No SLF4J providers were found.
SLF4J(W): Defaulting to no-operation (NOP) logger implementation
SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details.
Поставщиков SLF4J найти не удалось.
В вашем pom.xml зависимость logback-classic имеет область тестирования. Таким образом, он не находится в пути к классам вашего приложения. Удаление области тестирования решит проблему.
В пути к классам, показанном вашей IDE, упоминается log4j 1.2.17. Для использования logback-classic вам не нужен log4j 1.2.17.
Что касается доступа к журналу в вашем pom.xml, вам, вероятно, следует его удалить. Доступ к журналу интегрируется с контейнерами сервлетов, такими как Jetty или Tomcat, для обеспечения функций журнала HTTP-доступа. Это отличается от ведения журнала приложений, которое обеспечивают logback-classic и SLF4J. Более того, для доступа к журналу обычно требуется совсем другая настройка, чем для классического журнала, поскольку доступ к журналу должен быть интегрирован с HTTP-регистрацией вашего контейнера сервлетов.
Покажите свой pom.xml