目录
Spring Boot 日志依赖关系
日志配置项全局设置
Log Levels 日志级别
Log Groups 日志记录器组
指定 Logback 日志配置文件
Spring boot 官网文档:boot-features-logging
1、Sping-boot-starter 是Spring Boot 启动器,每一个 Spring boot 应用都会依赖到它
2、Sping-boot-starter 依赖 Sping-boot-starter-looging
3、Spring Boot 底层默认使用 slf4j+logback 的方式进行日志记录
4、Spring Boot 使用中间替换包把其的日志框架都替换成了slf4j;
5、所以开发中如果要引入其他框架,则一定要把这个框架的默认日志依赖移除掉,否则会起冲突。如 Spring 框架默认用的是commons-logging;而 Spring Boot 底层用的就是Spring ,所以自己也要移除掉Spring 的日志框架:
org.springframework
spring‐core
commons‐logging
commons‐logging
6、总而言之:Spring Boot 能自动适配所有的日志框架,且底层使用 slf4j+logback 的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可;
1、日志的级别由低到高分别为:trace(跟踪) < debug(调试) < info(信息) < warn(警告) < error(错误)
2、在配置文件中调整输出的日志级别,日志就只会在这个级别及以后的高级别生效,Spring Boot 默认使用 info 级别。
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Date;
@RunWith(SpringRunner.class)
@SpringBootTest
public class CocoApplicationTests {
/**
* 获取日志记录器
*/
private static Logger logger = LoggerFactory.getLogger(CocoApplicationTests.class);
@Test
public void contextLoads() {
logger.trace("这是 trace 日志...");
logger.debug("这是 debug 日志...");
logger.info("这是 info 日志...");
logger.warn("这是 warn 日志...");
logger.error("这是 error 日志...");
}
}
3、Spring Boot 的全局配置文件 "application.properties"或者"application.yml" 中可以修改日志配置项:
# 指定特定包下面所有类的日志输出级别,未指定的仍然按Spring Boot的默认级别 info 输出.
logging.level.com.lct=debug
#表示在当前项目根目录下生成app.log日志文件,可以是绝对路径或者相对路径,如 logging.file: logs/app.txt
logging.file=app.log
# 在项目根路径下创建spring/log目录,然后使用 spring.log 作为默认日志文件,可以使用绝对或者相对路径
# 当 logging.path 与 logging.file 同时配置时,则以 logging.file 为准,logging.path 此时不再生效
logging.path=spring/log
# 指定控制台输出的日志格式,如:
# %d{yyyy-MM-dd HH:mm:ss} -- [%thread] %-5level %logger{50} %msg%n
# 1、%d 表示日期时间,
# 2、%thread 表示线程名,
# 3、%‐5level 级别从左显示5个字符宽度
# 4、%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
# 5、%msg 日志消息,
# 6、%n 换行符
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} -- [%thread] %-5level %logger{50} %msg%n
logging.pattern.file=%d{yyyy-MM-dd HH:mm} -- [%thread] %-5level %logger{50} %msg%n
1、默认情况下,日志文件超过10M 时,会新建文件进行递增,比如 spring.log、spring1.log、spring2.log.....,可以使用
logging.file.max-size
更改大小限制。2、默认情况下,日志只记录到控制台,不写入日志文件,如果要在控制台输出之外写入到日志文件,则需要设置 logging.file 或 logging.path 属性
6、Spring boot 官网 日志全部配置项:
# LOGGING
logging.config= # Location of the logging configuration file. For instance, `classpath:logback.xml` for Logback.
logging.exception-conversion-word=%wEx # Conversion word used when logging exceptions.
logging.file= # 日志文件名(例如"app.log"). 名称可以绝对路径或者相对路径
logging.file.max-history=0 # Maximum of archive log files to keep. Only supported with the default logback setup.
logging.file.max-size=10MB # Maximum log file size. Only supported with the default logback setup.
logging.level.*= # 指定特定包下面所有类的日志输出级别,未指定的仍然按Spring Boot的默认级别 info 输出.如 logging.level.org.springframework=DEBUG.
logging.path= # 日志文件的位置。例如,`/var/log`,与 logging.file 同时存在时,以 logging.file 优先.
logging.pattern.console= # 用于输出到控制台的追加器模式。仅支持默认的日志恢复设置。
logging.pattern.dateformat=yyyy-MM-dd HH:mm:ss.SSS # Appender pattern for log date format. Supported only with the default Logback setup.
logging.pattern.file= #用于输出到文件的追加器模式。仅支持默认的日志恢复设置。
logging.pattern.level=%5p # Appender pattern for log level. Supported only with the default Logback setup.
logging.register-shutdown-hook=false # Register a shutdown hook for the logging system when it is initialized.
7、这些配置是非常有用的,比如命令行启动一个 jar 包,但是它一执行就自动报错,然后退出了,都来不急看清错误信息,此时则可以拷贝出它的配置文件(如 application.yml),然后加上一句:logging.file: logs/app.txt,表示在当前目录下生成日志文件,接着再次启动时,错误信息就会自动存放进去。
1、通过配置 logging.level.
2、可以使用 logging.level.root 配置根日志记录器:
logging.level.root=WARN #根节点日志级别,即整个应用的日志级别设置,默认为 info
logging.level.org.springframework.web=DEBUG #单独某个包的日志级别设置,spring web 包日志输出级别
logging.level.org.hibernate=ERROR # 单独某个包的日志级别设置,hibernate 日志输出级别
logging.level.com.wmx=info #自己项目中指定包下的日志输出级别
#未特别指定的仍然按 Spring Boot 的默认的 logging.level.root 设置输出.
1、将相关的记录器组合在一起,以便可以同时对它们进行配置,这通常是很有用的。Spring Boot 允许在 Spring 环境中定义日志组。例如下面通过将 “tomcat” 组添加到 application.properties 中来定义它:
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
2、定义后,可以用一行更改组中所有记录器的级别:
logging.level.tomcat=TRACE
3、Spring Boot 包括以下预定义的日志记录组,可以开箱即用:
Name | Loggers |
---|---|
web |
|
sql |
|
1、可以直接在 Spring Boot 的全局配置文件中修改 slf4j 的默认配置,也可以使用 slf4j 实现框架的自己的配置文件。直接放置再类路径下即可,
2、官网参考链接,根据日志记录系统的不同,各自的配置文件文件也不同:
Logging System | Customization |
---|---|
Logback | logback-spring.xml , logback-spring.groovy , logback.xml or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) |
logging.properties |
3、因为 Spring Boot 底层默认采用 slf4j+logback 的日志组合,所以这里以 logback 的 logback.xml 为例,将配置为文件放入到类路径下(其它的日志框架实现也是同理)。
%d{yyyy-MM-dd HH:mm:ss.SSS} ==> [%thread] ==> %-5level %logger{50} - %msg%n
${LOG_HOME}/${appName}.txt
${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log
365
100MB
%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n
:定义日志存放的根目录,可以是相对路径,或者绝对路径.
:定义日志文件名称.
${LOG_HOME}/${appName}.txt :指定日志文件存放的全路径.
:指定应用中指定包路径下的日志日志类型、级别,必须根据实际情况改写成自己的.
:root 与 logger 是父子关系,没有指定 logger 的,全部统一用 root 配置处理.