SpringBoot 是为了简化 Spring 应用的创建、运行、调试、部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可以轻易的搭建出一个 WEB 工程
Spring Boot 内部采用的是 Commons Logging进行日志记录,但在底层为 Java Util Logging、Log4J2、Logback 等日志框架提供了默认配置 。
Java 虽然有很多可用的日志框架,但请不要担心,一般来说,使用 SpringBoot 默认的 Logback 就可以了。
日志格式
2018-07-04 09:23:50.770 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2018-07-04 09:23:50.770 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms
解释:
- 时间日期:精确到毫秒,可以用于排序
- 日志级别:ERROR、WARN、INFO、DEBUG、TRACE
- 进程ID
- 分隔符:采用 — 来标识日志开始部分
- 线程名:方括号括起来(可能会截断控制台输出)
- Logger名:通常使用源代码的类名
*日志内容:我们输出的消息
日志输出
SpringBoot 默认为我们输出的日志级别为 INFO、WARN、ERROR,如需要输出更多日志的时候,可以通过以下方式开启:
- 命令模式配置: java -jar app.jar –debug=true , 这种命令会被 SpringBoot 解析,且优先级最高
- 资源文件配置: application.properties 配置 debug=true 即可。该配置只对 嵌入式容器、Spring、Hibernate生效,我们自己的项目想要输出 DEBUG 需要额外配置(配置规则:logging.level.=)
日志输出级别配置
logging.level.root = WARN
logging.level.org.springframework.web = DEBUG
logging.level.org.hibernate = ERROR
#比如 mybatis sql日志
logging.level.org.mybatis = INFO
logging.level.mapper所在的包 = DEBUG
日志输出格式配置
- logging.pattern.console: 定义输出到控制台的格式(不支持JDK Logger)
- logging.pattern.file: 定义输出到文件的格式(不支持JDK Logger)
文件保存
默认情况下,SpringBoot 仅将日志输出到控制台,不会写入到日志文件中去。如果除了控制台输出之外还想写日志文件,则需要在application.properties 设置logging.file 或 logging.path 属性。
- logging.file: 将日志写入到指定的 文件 中,默认为相对路径,可以设置成绝对路径
- logging.path: 将名为 spring.log 写入到指定的 文件夹 中,如(/var/log)
日志文件在达到 10MB 时进行切割,产生一个新的日志文件(如:spring.1.log、spring.2.log),新的日志依旧输出到 spring.log 中去,默认情况下会记录 ERROR、WARN、INFO 级别消息。
- logging.file.max-size: 限制日志文件大小
- logging.file.max-history: 限制日志保留天数
自定义日志配置
由于日志在 ApplicationContext 之前就初始化好了,所以 SpringBoot 为我们提供了 logging.config 属性,方便我们配置自定义日志文件。默认情况它会根据日志的依赖自动加载。
Logback扩展配置
该扩展配置仅适用 logback-spring.xml 或者设置 logging.config 属性的文件,因为 logback.xml 加载过早,因此无法获取 SpringBoot 的一些扩展属性
使用扩展属性 springProfile 与 springProperty 让你的 logback-spring.xml 配置显得更有逼格,当别人还在苦苦挣扎弄logback-{profile}.xml的时候 你一个文件就搞定了…