在这个简短的教程中,我们将探索 Spring Boot 中可用的主要日志记录选项:logback和log4j2
初始设置使用 starters 时,默认使用 Logback 进行日志记录。
让我们首先创建一个 Spring Boot 模块。
添加依赖
org.springframework.boot spring-boot-starter-web
新建类
@RestController
public class LoggingController {
Logger logger = LoggerFactory.getLogger(LoggingController.class);
@RequestMapping("/")
public String index() {
logger.trace("A TRACE Message");
logger.debug("A DEBUG Message");
logger.info("An INFO Message");
logger.warn("A WARN Message");
logger.error("An ERROR Message");
return "Howdy! Check out the Logs to see the output...";
}
}
一旦我们加载了 Web 应用程序,我们就可以通过简单地访问http://localhost:8080/来触发这些日志记录行。
Spring Boot 使用模式和 ANSI 颜色对其进行预配置,以使标准输出更具可读性。
现在让我们运行应用程序并访问http://localhost:8080/页面,看看控制台中发生了什么。
我们可以看到,Logger 的默认日志级别预设为 INFO,这意味着TRACE和DEBUG消息是不可见的。
为了在不更改配置的情况下激活它们,我们可以在命令行上传递–debug或–trace参数:
java -jar target/spring-boot-logging-0.0.1-SNAPSHOT.jar --trace日志级别
Spring Boot 还允许我们通过环境变量访问更细粒度的日志级别设置。有几种方法可以实现这一点。
首先,我们可以在 VM 选项中设置日志记录级别:
-Dlogging.level.org.springframework=TRACE -Dlogging.level.com.test.java=TRACE
或者,如果我们使用 Maven,我们可以 通过命令行定义我们的日志设置:
mvn spring-boot:run -Dspring-boot.run.arguments=--logging.level.org.springframework=TRACE,--logging.level.com.test.java=TRACE
使用 Gradle 时,我们可以通过命令行传递日志设置。这将需要设置bootRun任务。
完成后,我们运行应用程序:
./gradlew bootRun -Pargs=--logging.level.org.springframework=TRACE,--logging.level.com.test.java=TRACE
如果我们想永久更改详细程度,我们可以在application.properties文件中这样做,如下所述:
logging.level.root=WARN logging.level.com.baeldung=TRACE
最后,我们可以使用我们的日志框架配置文件永久更改日志级别。
我们提到 Spring Boot Starter 默认使用 Logback。让我们看看如何定义一个 Logback 配置文件的片段,我们在其中为两个单独的包设置级别:
请记住,如果 使用上述不同选项多次定义包的日志级别,但使用不同的日志级别,将使用最低级别。
因此,如果我们同时使用 Logback、Spring Boot 和环境变量设置日志级别,那么日志级别将是TRACE,因为它是请求级别中最低的。
配置logback尽管默认配置也挺好用,但无法满足我们实际企业对于生产环境中的日志记录。
比如:自定义的日志格式、日志输出基本、日志文件保存策略等等,为此我们需要自定义一份日志设置文件。
Spring Boot 启动时候会去类路径下按顺序查找以下配置文件:
logback-spring.xmllogback.xmllogback-spring.groovylogback.groovy
此处,我们在resources目录下新建logback-spring.xml,内容如下:
%green(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable ${LOGS}/spring-boot-logger.log %d %p %C{1.} [%t] %m%n ${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log 10MB
再次启动项目访问后,查看输出如下:
正如我们所看到的,它现在记录了TRACE和DEBUG消息,并且整个控制台模式在文本和色彩上都与以前不同。
它现在还登录在当前路径下创建的/logs文件夹中的文件,并通过滚动策略将其存档。
使用log4j2除了使用默认的logback我们还推荐使用log4j2,从先进性上面来讲log4j2更胜一筹。
首先我们需要调整以下pom依赖:
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-logging org.springframework.boot spring-boot-starter-log4j2
此时,我们需要在类路径中放置一个配置文件,名称可以是下面这样:
log4j2-spring.xmllog4j2.xml
我们将通过 Log4j2(通过 SLF4J)打印,无需进一步修改。
让我们编写一个简单的log4j2-spring.xml:
%green(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable ${LOGS}/spring-boot-logger.log %d %p %C{1.} [%t] %m%n ${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log 10MB
再编写一个测试类:
@RestController
@Slf4j
public class LombokLoggingController {
@RequestMapping("/dolog4j")
public String index(){
log.trace("A TRACE Message");
log.debug("A DEBUG Message");
log.info("An INFO Message");
log.warn("A WARN Message");
log.error("An ERROR Message");
return "Howdy! Check out the Logs to see the output...";
}
}
启动程序访问后的日志输出如下:



