6.1.4 配置日志
大多数应用程序都提供某种形式的日志记录。即使应用程序没有直接记录任何内容,应用程序使用的库也肯定会记录它们的活动。
默认情况下,Spring Boot 通过 Logback (http://logback.qos.ch) 配置日志,默认为 INFO 级别,然后写入控制台。在运行应用程序和其他示例时,可能已经在应用程序日志中看到了大量的 INFO 级别的日志条目。作为提醒,这里有一个默认日志格式的日志记录示例(为适合页面边距进行了换行):
2021-07-29 17:24:24.187 INFO 52240 --- [nio-8080-exec-1] com.example.demo.Hello
Here's a log entry.
2021-07-29 17:24:24.187 INFO 52240 --- [nio-8080-exec-1] com.example.demo.Hello
Here's another log entry.
2021-07-29 17:24:24.187 INFO 52240 --- [nio-8080-exec-1] com.example.demo.Hello
And here's one more.
要完全控制日志配置,可以在类路径的根目录(在 src/main/resources 中)创建 log .xml 文件。下面是一个简单的 logback.xml 文件的例子:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<logger name="root" level="INFO"/>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
使用此新配置,以前的相同示例日志条目可能如下所示(为适合页面边距进行了换行):
17:25:09.088 [http-nio-8080-exec-1] INFO com.example.demo.Hello
- Here's a log entry.
17:25:09.088 [http-nio-8080-exec-1] INFO com.example.demo.Hello
- Here's another log entry.
17:25:09.088 [http-nio-8080-exec-1] INFO com.example.demo.Hello
- And here's one more.
除了用于日志的模式外,Logback 配置或多或少与没有 logback.xml 文件时得到的默认配置相同。但是通过编辑 logback.xml,可以完全控制应用程序的日志文件。
注意:logback.xml 中包含的具体内容超出了本书的范围。有关更多信息,请参阅 Logback 的文档。
对日志配置最常见的更改是更改日志级别,可能还会指定应该写入日志的文件。使用 Spring Boot 配置属性,可以在不创建 logback.xml 文件的情况下进行这些更改。
要设置日志记录级别,需要创建以 logging.level 为前缀的属性,后面接上要为其设置日志级别的日志记录器的名称。例如,假设想将 root 日志级别设置为 WARN,但是将 Spring 安全日志设置为 DEBUG 级别。可以像下面这样设置:
logging:
level:
root: WARN
org:
springframework:
security: DEBUG
另外,可以将 Spring Security 包的名称折叠成一行,以便于阅读:
logging:
level:
root: WARN
org.springframework.security: DEBUG
现在,假设希望将日志条目写入位于 /var/logs/ 文件夹下的 TacoCloud.log 文件。logging.file.path 和 logging.file.name 属性可以帮助实现这一点:
logging:
file:
path: /var/logs/
name: TacoCloud.log
level:
root: WARN
org:
springframework:
security: DEBUG
假设应用程序对 /var/logs/ 文件夹有写权限,那么日志将被写到 /var/logs/TacoCloud.log 文件中。默认情况下,日志文件在大小达到 10 MB 时就会进行循环写入。