Spring Boot日志配置
目录
logback
使用logback
获取日志对象
日志级别
控制日志输出级别
日志输出格式控制
配置方式
日志转存
示例
日志是应用程序不可或缺的一部分,记录着程序运行的信息。主要作用有:
- 记录日常运营的重要信息
- 记录应用报错信息
- 记录过程数据等
logback
Logback 作为 Spring Boot 的默认日志实现框架,异步吞吐量相比于Log4j更加强大:
组件 说明 Logger 日志记录器,存放日志对象,负责日志分类和级别控制 Appender 指定日志输出目的地 Layout 日志格式转换成字符串,输出格式化的日志信息 使用logback
在SpringBoot项目中,导入了spring-boot-starter起步依赖,则默认导入了logback所需的依赖,同样导入spring-boot-starter-web也是如此:
获取日志对象
方法一:
private static final Logger log = LoggerFactory.getLogger(LogbackApplication.class);
log.warn("sdadas"); log.info("info..."); log.error("jksabnfijASBF"); log.debug("daskdhaoisjdhja");
注意:使用Logger时导入的包是org.slf4j下的,而不是java.util。
方法二:使用@Slf4j注解:
注:该方法在启用前要先启用lombok(SpringBoot内置了lombok)
org.projectlombok lombok true
该方法省去了创建对象的麻烦,只需要加上@Slf4j注解,就会自动生成log变量。
日志级别
SpringBoot的日志级别用于控制日志输出的详细程度,日志级别越高,输出的日志越详细。
级别 说明 TRACE 运行堆栈信息,使用率低 DEBUG 调试时打印关键信息 INFO 普通的打印信息,记录运维过程数据 WARN 警告数据,不影响使用 ERROR 记录错误日志信息 FATAL 致命错误,代码异常导致程序退出的错误 控制日志输出级别
可以在springboot的配置文件中设置日志的输出级别:
logging: level: root: error
日志输出格式控制
对于单条日志信息来说,日期,触发位置,记录信息是最核心的信息。级别用于做筛选过滤,PID与线程名用于做精准分析。
配置方式
logging: pattern: console: "%logger{36} - %msg%n" #控制台输出格式 file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n" #文件输出格式
占位符 说明 示例输出 %d{yyyy-MM-dd HH:mm:ss} 日期时间,按照指定的格式输出。yyyy-MM-dd HH:mm:ss 表示年-月-日 时:分:秒。 2023-10-05 14:30:45 [%thread] 输出日志的线程名称,放在方括号中。 [main] %-5level 日志级别,固定宽度为 5 个字符,左对齐。常见的级别有 INFO、DEBUG、ERROR 等。 INFO (注意后面有一个空格) %logger{36} 日志记录器的名称,最多显示 36 个字符。如果名称超过 36 个字符,会进行截断。 com.example.MyClass - 一个分隔符,用于分隔日志记录器名称和日志消息。 - %msg 日志消息内容,即开发者在代码中记录的日志信息。 This is a log message. %n 换行符,表示日志记录结束并换行。 (在文件中表现为换行) 示例:"%d{yyyy-MM-dd HH:mm:ss} %logger{36} - %msg%n"
日志转存
日志不仅能在控制台上显示,还可以存在文件中,方便后续的查阅。
配置方式:设置日志文件名即可
logging:
file:
path: ./logs/ #路径
示例
logging: file: path: ./logs/
注意:不需要手动创建该路径,Springboot程序启动后会自动创建。如果不指定文件名,会自动默认创建在spring.log文件中。如果不修改路径,日志会追加在spring.log文件中。
对于线上复杂的情况,可以对日志文件进行配置:
首先创建一个logback的配置文件:
${log.pattern} ${log.charset} ${log.base}/info/_info.log ${log.pattern} ${log.charset} ${log.base}/info/archive/info_%d{yyyy-MM-dd}.%i.log.zip ${log.max.days} ${log.max.size} INFO ACCEPT DENY ${log.base}/warn/_warn.log ${log.pattern} ${log.charset} ${log.base}/warn/archive/warn_%d{yyyy-MM-dd}.%i.log.zip ${log.max.days} ${log.max.size} WARN ACCEPT DENY ${log.base}/error/_error.log ${log.pattern} ${log.charset} ${log.base}/error/archive/error_%d{yyyy-MM-dd}.%i.log.zip ${log.max.days} ${log.max.size} ERROR ACCEPT DENY
注:Springboot会默认加载classpath:logback-spring.xml或者classpath:logback-spring.groovy或者:classpath:logback.xml,可自定义配置:
logging: config: classpath:logback-suke.xml
不要使用logback-logback.xml这个来命名,否则spring boot将不能完全实例化