springBoo日志配置
前言
代码规约推荐曰志文件至少保存15天,可以根据日志文件的重要程度、文件大小及磁盘空间自己设置保存时间。要为曰志文件设置合理的生命周期及时清理过期的日志。一般日志框架有:
Log4j JUL(java.util.logging)(java.util.logging)(担心被抢市场,推出的)
Log4j2( apache开发的很强大,借了log4j的名,但很多框架未适配上)
Logback(与Log4j是同一个人开发的,是log4j的升级版)
主流日志库(负责实现日志功能)有三个,分别为:log4j、log-jdk(java.util.logging.Logger)、logback。logback是log4j的升级版且本身实现了slf4j的接口。
一、日志级别
日志级别从低到高分为:ALL< TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
OFF 关闭:最高级别,不打印日志
FATAL 致命:指明非常严重的可能会导致应用终止执行的错误事件
ERROR 错误:指明错误事件,但应用可能还能继续运行
WARN 警告:指明可能潜在的危险状况
INFO 信息:指明描述信息,从粗粒度上描述了应用运行过程
DEBUG 调试:指明细致的事件信息,对调试应用最有用
TRACE 跟踪:指明程序运行轨迹,比DEBUG级别的粒度更细
ALL 所有:所有日志级别,包括定制级别
如果日志级别设置为L,>= L级别的日志才会输出。
即如果日志级别L设置INFO,只有级别为INFO、WARN,ERROR 后面的日志才会正常输出。
生产环境禁止输出 DEBUG 曰志且有选择地输出 INFO日志
二、springBoot默认日志
Spring Boot提供对JUL、log4j2、Logback的默认配置,默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。
从上图可以看到,日志输出内容元素具体如下:
时间日期:精确到毫秒
日志级别:ERROR, WARN, INFO, DEBUG or TRACE
进程ID
分隔符:— 标识实际日志的开始
线程名:方括号括起来(可能会截断控制台输出)
Logger名:通常使用源代码的类名
日志内容
1.日志依赖jar包
Spring Boot 默认的日志框架 logback,日志包需要的依赖spring-boot-starter-logging已经被spring-boot-starter依赖包含了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.控制台默认日志修改
# 日志配置
logging:
pattern:
console: '%clr(%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n)' #控制台日志格式配置
level: #Spring Boot默认设定的是 info 级别日志
com.nianyu.demo.*.dao: debug # 指定某个类或某个包的日志级别
代码里直接输出日志
private static final Logger logger = LoggerFactory.getLogger(this.getClass());
public void log() {
logger.trace("日志输出 trace");
logger.debug("日志输出 debug");
logger.info("日志输出 info");
logger.warn("日志输出 warn");
logger.error("日志输出 error");
}
3.自定义日志配置文件
默认情况下,springBoot将日志输出到控制台,不会写到日志文件。要写到日志文件需要配置。
方式一:
直接在配置文件配置
logging:
pattern:
file: '%clr(%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n)' #日志文件的日志格式
level:
root: warn #root日志以WARN级别输出
file:
path: /app/logs #日志输出路径
name: demo.log #指定日志文件名
注意: 如果只配置 logging.file.name,会在项目的当前路径下生成一个 xxx.log 日志文件;
如果只配置 logging.file.path,在配置的文件夹生成一个日志文件为 spring.log;
二者不能同时使用,如若同时使用,则只有logging.file.name生效;
默认情况下,日志文件的大小达到10MB时会切分一次,产生新的日志文件
方式二:
方式一只能配置简单的场景,保存路径、日志格式等,复杂的场景(区分 info 和 error 的日志、每天产生一个日志文件等)满足不了,只能通过写文件自定义日志配置
根据不同的日志系统,你可以按如下规则组织配置文件名,将日志的配置文件放在src/main/resources就能被正确加载:
Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2:log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging):logging.properties
Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,springBoot可以为它添加一些springBoot特有的配置项(下面会提到)因为:
logback.xml :是直接就被日志框架加载了, 加载早于application.properties,application.yml。
logback-spring.xml:配置项不会被日志框架直接加载,而是由 SpringBoot 解析日志配置文件
所以如果你在logback.xml使用了变量时,而恰好这个变量是写在application.properties时,那么就会获取不到,只要改成logback-spring.xml就可以解决
如果不想用规定的上述日志配置文件名,可以自己自定义命名, 需要在application.yml中配置日志配置文件的位置, 并且也可以用springBoot特有的配置项
logging