slf4j-простой регистратор не работает в проекте Maven Vertx - PullRequest
0 голосов
/ 04 июня 2018

Ниже приведен мой logback.xml файл:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
 <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{36} - %msg%n</Pattern> -->
     <Pattern>%-30(%date{ISO8601,UTC} [%thread]) %highlight(%-5level) %logger{32} %line - %msg%n </Pattern>
   </layout>
 </appender>  
 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
   <file>logs/search_service.log</file>
   <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
     <!-- <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</Pattern> -->
     <Pattern>%-30(%date{ISO8601,UTC} [%thread]) %highlight(%-5level) %logger{32} %line - %msg%n </Pattern>
   </encoder>
   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>logs/archived/search_service.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <!-- <maxFileSize>10MB</maxFileSize> -->
    </timeBasedFileNamingAndTriggeringPolicy>
   </rollingPolicy>
  </appender>

  <root level="info">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>  
  <!-- <root level="debug">
      <appender-ref ref="STDOUT" />
      <appender-ref ref="FILE" />
  </root> -->
</configuration>

Ниже приводится зависимость maven, которую я использую:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.25</version>
</dependency>

Ниже описано, как я использую ее в своем основном классе.:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Mainclass extends AbstractVerticle {
    final static Logger LOGGER = LoggerFactory.getLogger(Mainclass.class);

    public static void main(String[] args){
        LOGGER.info("Hi.");
    }
}

Ниже описан способ развертывания моей жирной банки:

java -DconfigPath="myconfig.conf" -DLogback.configurationFile="logback.xml" -jar myapp.jar

Моя проблема в том, что когда я запускаю указанную выше команду, она выдает мне три предупреждения следующим образом:журналы и файлы журналов не создаются:

log4j:WARN No appenders could be found for logger (io.netty.util.internal.logging.InternalLoggerFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

1 Ответ

0 голосов
/ 05 июня 2018

Кажется, в вашей конфигурации и пути к классам много путаницы.Вы ссылаетесь на файл logback.xml, у вас есть зависимость Maven от slf4j-simple, и вы получаете сообщения из Log4j.Logback, slf4j-simple и Log4j - это три совершенно разные системы ведения журналов, с которыми SLF4J может взаимодействовать.

Итак, давайте вернемся на минуту назад.Смысл SLF4J в том, что это «фасад» (это аббревиатура «F») для любой реальной системы ведения журнала, которую вы хотите использовать.Это означает, что если ваш код регистрируется с использованием SLF4J API, вы можете при необходимости изменить свою систему регистрации.Что еще более важно, если библиотеки, которые вы называете журналом, используют API SLF4J, вы можете просто подключить SLF4J к системе ведения журнала, которую использует остальная часть вашего проекта.

Способ настройки SLF4J для использования желаемой реальной системы ведения журналаэто включение привязки для него в вашем classpath.Привязка - это то, что перенаправляет сообщения журнала из API SLF4J в реальную базовую систему ведения журнала.Для большинства привязок также требуется наличие реальной системы ведения журнала на вашем пути к классам (то есть, если вы используете Log4j 1.2, вы должны включить slf4j-log4j12, а также log4j в свой путь к классам).Другие привязки, такие как Logback и slf4j-simple, действуют как в качестве привязки, так и в качестве реальной системы ведения журнала, поскольку они спроектированы для работы с SLF4J с самого начала.Вам нужна ровно одна привязка к вашему classpath, и вам не нужны никакие другие системы ведения журналов, кроме той, которую вы хотите использовать в вашем classpath.Но вам нужно выяснить, какую систему ведения журналов вы на самом деле хотите использовать, поскольку существует множество опций, как и в любом технологическом решении.

Поскольку вы используете Maven для управления зависимостями на вашем пути к классам, вы можетезапустите "mvn dependency: tree ", чтобы увидеть список всех зависимостей и то, что ваши зависимости приносят. Это может помочь вам выяснить, какие привязки и системы ведения журналов вы и ваши библиотеки используете.

Хорошие библиотеки, предназначенные для использования с SLF4J, будут просто включать slf4j-api, так как привязка должна использоваться главным приложением.Если у вас есть библиотека, которая пытается использовать свою собственную систему ведения журналов, вам может потребоваться использовать Maven, чтобы исключить ее.Вы можете перенаправить другие системы ведения журнала, чтобы использовать SLF4J вместо этого с мостом , если необходимо.

После того, как вы разобрали свои зависимости, чтобы к SLF4J была подключена только одна система ведения журнала, и любые зависимостикоторые хотят использовать другую систему ведения журнала, подключены к этой системе, тогда вы должны иметь возможность настроить эту систему ведения журнала, как бы она ни работала (например, logback.xml, если вы используете Logback) для просмотра вашей регистрации.

...