我正在使用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
因此,它不显示记录它的行。 我还应该添加其他内容吗?
答案 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
将使您可以更好地配置其他所有内容,例如Appenders
,Patterns
等(您可以通过{{1 }} )。
正如 @MarkBrammik 所述,application.properties
仅仅是一个抽象,因此还不够。我们使用sl4j
作为接口来利用其他具体的日志记录API,例如sl4j
,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
从Spring依赖项中排除,否则可能会出现Logback
错误:
Class path contains multiple SLF4J bindings
您可以查看下面提供的链接以获取更多信息,我希望您会发现它有用:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html