记录器无法在Spring Boot 1.5.7中使用log4j.properties打印

时间:2018-10-29 07:55:57

标签: java spring-boot logging log4j

我正在使用slf4j-api进行日志记录,并使用log4j作为记录器。但是在我的Spring Boot项目中,它没有在log4j.properties中使用自定义log4j设置显示正确的日志。

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 :(得分:1)

slf4j-api 本身不提供日志记录系统的任何具体实现。如果需要,它是一组接口。

因此仅添加slf4j-api是不够的。

如注释中所建议,

Logback包含日志记录系统的实际实现。 可以显式导入该库,如果您希望使用零日志记录配置,请确保已导入spring-boot-starter-logging。

因此,应该使用logback作为log4j的替代方法,log4j也是日志系统的真实实现(也可以使用,但坦白地说,logback在功能方面优于log4j1,所以我看不到这样做的理由。)

一旦您拥有logback,设置它的方法就是在资源中提供一个logback.xml文件,该文件中应该包含您需要的任何配置。

答案 1 :(得分:1)

如果希望默认记录器打印所需的图案,则只需在application.properties中添加以下内容:

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

Spring Boot提供Logback作为其默认记录器。此外,在logback.xml中添加CLASSPATH将使您可以更好地配置其他所有内容,例如AppendersPatterns等(您可以通过{{1 }} )。

正如 @MarkBrammik 所述,application.properties仅仅是一个抽象,因此还不够。我们使用sl4j作为接口来利用其他具体的日志记录API,例如sl4jLogbacklog4j等。

此外,如果要使用JDK(java.util.logging),则必须在log4j中添加以下依赖项

pom.xml

,然后您可以使用放置在<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j</artifactId> </dependency> 中的log4j.properties对其进行进一步配置。如果使用CLASSPATH,则必须将log4j从Spring依赖项中排除,否则可能会出现Logback错误:

Class path contains multiple SLF4J bindings

您可以查看下面提供的链接以获取更多信息,我希望您会发现它有用:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html