Регистратор не печатает с log4j.properties в Spring Boot 1.5.7 - PullRequest
0 голосов
/ 29 октября 2018

Я использую slf4j-api для регистрации и log4j как регистратор. Но в моем проекте Spring Boot он не показывает правильные журналы с пользовательскими настройками log4j в log4j.properties.

POM

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

log4j.properties

# Root logger option
log4j.rootLogger=INFO, stdout

# Direct log messages to 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

Он печатает что-то вроде:

2018-10-29 13:47:40.601  INFO 7740 --- [nio-8080-exec-1] k.a.o.controller.CustomController     : 2018-08-02 2018-08-04

так, это не показывает линию, где это было зарегистрировано. Должен ли я добавить что-нибудь еще?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Если вы хотите, чтобы регистратор по умолчанию *1001* печатал нужный шаблон, вам просто нужно добавить следующее в application.properties:

logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

Spring Boot предоставляет Logback в качестве регистратора по умолчанию. Кроме того, добавление logback.xml в ваш CLASSPATH позволит вам лучше настроить все остальное, например Appenders, Patterns и т. Д. ( Вы можете сделать то же самое с помощью application.properties и ).

Как уже упоминалось @ MarkBrammik , sl4j является лишь абстракцией и, следовательно, недостаточно. Мы используем sl4j в качестве интерфейса для использования других конкретных API журналирования, таких как Logback, log4j, JDK(java.util.logging) и т. Д.

Кроме того, если вы хотите использовать log4j, вам нужно будет добавить следующую зависимость в ваш pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
</dependency>

и затем вы можете дополнительно настроить его, используя log4j.properties, помещенный в ваш CLASSPATH. Если вы используете log4j, вам придется исключить Logback из ваших зависимостей Spring, иначе вы можете получить ошибку Class path contains multiple SLF4J bindings:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Вы можете проверить ссылку ниже для получения дополнительной информации, и я надеюсь, что вы найдете ее полезной: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html

0 голосов
/ 29 октября 2018

slf4j-api само по себе не обеспечивает какой-либо конкретной реализации системы ведения журнала. Это набор интерфейсов, если хотите.

Поэтому недостаточно добавить только slf4j-api.

Logback, как было предложено в комментариях, содержит реальную реализацию системы регистрации. Эта библиотека может быть импортирована в явном виде, если вы предпочитаете нулевую конфигурацию ведения журнала, убедитесь, что spring-boot-starter-logging импортирована.

Таким образом, logback должен использоваться в качестве альтернативы log4j, который также является реальной реализацией системы ведения журнала (его также можно использовать, но, честно говоря, logback превосходит log4j1 с точки зрения функциональности, поэтому я не вижу никакой причина для этого).

Если у вас есть logback, способ установить его - предоставить файл logback.xml в ресурсах, которые должны содержать любую необходимую вам конфигурацию.

...