Подтвердить что ты не робот

Где сохраняется файл журнала slf4j?

У меня есть следующие импорт:

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

и следующее инстанцирование:

private static Logger logger = LoggerFactory.getLogger(Test.class);

и в моем основном методе:

logger.info("SOME MESSAGE: ");

Однако я не могу найти выход в любом месте. Все, что я вижу, это то, что в моей консоли есть:

21:21:24.235 [main] INFO  some_folder.Test - SOME MESSAGE: 

Как найти файл журнала?

Обратите внимание, что на моем пути сборки следуют следующие:

slf4j-api-1.7.5.jar

slf4j-log4j12-1.6.4.jar

Я прочитал ответ на аналогичные вопросы, но никто на самом деле не говорит, как исправить эту проблему.

4b9b3361

Ответ 1

slf4j - это только API. У вас должна быть конкретная реализация (например, log4j). Эта конкретная реализация имеет файл конфигурации, который сообщает вам, где хранить журналы.

enter image description here

Когда slf4j ловит сообщения журнала с регистратором, ему присваивается приложение, которое решает, что делать с сообщением. По умолчанию ConsoleAppender отображает сообщение в консоли.

Файл конфигурации по умолчанию:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">

  <Appenders>
    <!-- By default => console -->
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>

  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

Если вы поместите файл конфигурации в путь к классам, то ваша конкретная реализация (в вашем случае log4j) найдет и использует ее. См. Документация Log4J.

Пример файла appender:

<Appenders>
<File name="File" fileName="${filename}">
  <PatternLayout>
    <pattern>%d %p %C{1.} [%t] %m%n</pattern>
  </PatternLayout>
</File>

...
</Appenders>

Полный пример с файловым приложением:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">

  <Appenders>
    <File name="File" fileName="${filename}">
      <PatternLayout>
        <pattern>%d %p %C{1.} [%t] %m%n</pattern>
      </PatternLayout>
    </File>
  </Appenders>

  <Loggers>
    <Root level="error">
      <AppenderRef ref="File"/>
    </Root>
  </Loggers>

</Configuration>

Ответ 2

Как уже упоминалось, его просто фасад, и он помогает легко переключаться между различными версиями регистратора. Например, если вы хотите использовать реализацию log4j.

Пример кода будет выглядеть ниже.

Если вы используете maven, получите зависимости

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.6</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.5</version>
    </dependency>

Введите ниже в log4j.properties в местоположении src/main/resources/log4j.properties

            log4j.rootLogger=DEBUG, STDOUT, file

            log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
            log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
            log4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

            log4j.appender.file=org.apache.log4j.RollingFileAppender
            log4j.appender.file.File=mylogs.log
            log4j.appender.file.layout=org.apache.log4j.PatternLayout
            log4j.appender.file.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss} %-5p %c{1}:%L - %m%n

Hello world code ниже будет печатать на консоли и в файл журнала в соответствии с приведенной выше конфигурацией.

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

            public class HelloWorld {
              public static void main(String[] args) {
                Logger logger = LoggerFactory.getLogger(HelloWorld.class);
                logger.info("Hello World");
              }
            }

enter image description here

Ответ 3

По умолчанию файл не записывается в файл. Вам нужно настроить что-то вроде RollingFileAppender и записать в него корневой регистратор (возможно, в дополнение к умолчанию ConsoleAppender).

Ответ 4

Файл журнала не отображается, поскольку расположение файла конфигурации slf4j необходимо передать в команду запуска java, используя следующие аргументы. (например)

-Dlogging.config = {file_location}\log4j2.xml

-Dlog4j.configurationFile = {file_location}\log4j2.xml