Невозможно использовать версию журнала 1.5.3 в проекте maven

Я создал простой проект 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 выделены серым цветом. В чем причина этого? введите сюда описание изображения

Покажите свой pom.xml

Thorbjørn Ravn Andersen 08.04.2024 14:07

Выглядит неплохо. Убедитесь, что сборка прошла успешно.

Thorbjørn Ravn Andersen 08.04.2024 14:47

Да. Сборка также становится успешной. Но логи не печатаются. В документации slf4j я видел одну вещь: они используют механизм ServiceLoader из версии 2.0.x. slf4j.org/codes.html#noProviders

rushikesh kamthe 08.04.2024 14:50
Не удалось выполнить цель org.apache.maven.plugins
Не удалось выполнить цель org.apache.maven.plugins
Опишу, что когда я только начинал изучать Maven, у меня не получалось компилировать и упаковывать.
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
0
3
211
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Упомянутое вами предупреждение рассказывает следующую историю:

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-регистрацией вашего контейнера сервлетов.

Другие вопросы по теме