日志的使用
(一) Spring Boot默认的日志级别和配置
日志常用的级别有以下五种:
- trace
- debug
- info
- warn
- error
以上级别按照优先级顺序trace<debug<info<warn<error
,日志的级别可以调整,当确定了级别以后,logback会输出当前级别以及比当前级别高的日志信息.
Spring Boot默认的日志级别是root
,也就是info,如果不在配置文件中修改,日志框架会默认输出info,warn和error级别的日志到控制台,关于修改日志的默认级别会在下文提到.
再说日志的输出格式,日志输出格式中,按照以下的格式输出日志:
- %d 表示日期时间
- %thread表示线程名
- %-5level 级别从左显示5个字符宽度
- %logger{50} 表示logger名字最长50个字符,负责按照句点分割
- %msg 日志消息
- %n 换行符
按照以上格式,日志完整的格式实例如下:
%d{yyyy‐MM‐dd HH:mm:ss.SSS} [%thread] %‐5level %logger{50} ‐ %msg%n
在Spring Boot的配置文件中,我们可以按照以下的配置来修改日志框架的级别,格式以及文件位置:
logging.level.com.atguigu=trace
#logging.path=
# 不指定路径在当前项目下生成springboot.log日志
# 可以指定完整的路径;
#logging.file=G:/springboot.log
# 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件
logging.path=/spring/log
# 在控制台输出的日志的格式
logging.pattern.console=%d{yyyy‐MM‐dd} [%thread] %‐5level %logger{50} ‐ %msg%n
# 指定文件中日志输出的格式
logging.pattern.file=%d{yyyy‐MM‐dd} === [%thread] === %‐5level === %logger{50} ==== %msg%n
关于logging.file和logging.path,以下表格可以作为对比:
logging.file | logging.path | Example | Description |
---|---|---|---|
none | none | 只在控制台输出日志 | |
指定了文件名 | none | my.log | 输出日志到my.log文件 |
none | 指定了目录 | /var/log | 输出到指定目录的spring.log文件中 |
(二) 指定自己的配置文件
有的时候,我们需要自己来定制日志的各项属性,Spring Boot支持自定义的日志配置文件,具体的配置有表如下:
Logging System | Customization |
---|---|
Logback | logback-spring.xml , logback-spring.groovy , logback.xml ,logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK | logging.properties |
如果使用日志框架的配置文件格式,配置文件会被日志框架识别,跳过SpringBoot,不能使用某些SpringBoot提供的功能.
logback-spring.xml:日志框架就不直接加载日志的配项,由SpringBoot解析日志配置,可以使用SpringBoot的高级Profile功能
比如多环境输出日志:
<springProfile name="staging">
<!‐‐ configuration to be enabled when the "staging" profile is active ‐‐>
可以指定某段配置只在某个环境下生效
</springProfile>
使用例子如下:
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<!‐‐
日志输出格式:
%d表示日期时间,
%thread表示线程名,
%‐5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符
‐‐>
<layout class="ch.qos.logback.classic.PatternLayout">
<springProfile name="dev">
<pattern>%d{yyyy‐MM‐dd HH:mm:ss.SSS} ‐‐‐‐> [%thread] ‐‐‐> %‐5level
%logger{50} ‐ %msg%n</pattern>
</springProfile>
<springProfile name="!dev">
<pattern>%d{yyyy‐MM‐dd HH:mm:ss.SSS} ==== [%thread] ==== %‐5level
%logger{50} ‐ %msg%n</pattern>
</springProfile>
</layout>
</appender>
(三) 日志框架的切换
在Spring Boot总,默认是使用logback的方式来写入日志的,现在我们想要切换为其他的日志框架,比如说切换为log4j2,只需要改变一下pom文件即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring‐boot‐starter‐logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐log4j2</artifactId>
</dependency>
可以看到,我们派出了logging的依赖,引入了springboot对log4j2的依赖支持,这样在启动的时候就是使用log4j2日志实现,具体相关的说明可以查看SpringBoot官方文档.
总结
在SpringBoot中日志的使用就说到这里,大体来说,日志的使用没有什么难的地方,只要细心,并且多查看文档,就能解决.