Spring Boot日志使用
前言: 这是我第一次仔细研究Spring Boot相关的知识,就拿日志下手了,欢迎大家指点
Spring Boot日志关系
这个是Spring Boot的启动器,我们点击spring-boot-starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
这个spring-boot-starter-logging就是Spring Boot用来做日志功能的
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
底层依赖关系

通过这张图我们能总结出
Spring Boot底层也是使用slf4j+logback的方式进行日志记录
Spring Boot也把其他的日志都替换成了slf4j;
那么Spring Boot是如何将这些日志都替换成slf4j的呢?我们找到其中的一个jcl-over-slf4j

我们可以看到里面有个commons.logging,里面实现的正是SLF4JLogFactory
@SuppressWarnings("rawtypes")
public abstract class LogFactory {
static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J = "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j";
static LogFactory logFactory = new SLF4JLogFactory();
那么我们如果要引入其它框架,一定要把这个框架的默认日志依赖移除掉。
Spring Boot用的是commons-logging
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可;
日志使用
默认配置
Spring Boot默认帮我们配置好了日志;日志有五种级别,由低到高是trace<debug<info<warn<error,可以调整输出的日志级别;日志就只会在这个级别及以后的高级别生效,Spring Boot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别
为什么也叫root级别呢,依次点击文件目录下的这些文件
A[External Libraries]-->B[springframework.boot.spring-boot]
B-->C[org]
C-->D[springframework]
D-->E[boot]
E-->F[logging]
F-->G[logback]
G-->H[base.xml]

从图中我们能看出,Spring Boot有个默认标签<root>里面指定的级别正是INFO,这也就是为什么默认级别叫root级别,作为一个小知识点给大家扩展了一下,下面进入正题,我们在测试类中写下以下代码。
//记录器
Logger logger = LoggerFactory.getLogger(getClass());
@Test
public void contextLoads() {
logger.trace("这是trace日志...");
logger.debug("这是debug日志...");
//SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别
logger.info("这是info日志...");
logger.warn("这是warn日志...");
logger.error("这是error日志...");
}
现在我们启动这个测试类

可以看出只打印出了info及以后的日志记录,也印证了前面所说的
修改默认配置
接下来我们来修改Spring Boot的默认配置
- 修改默认级别
- 输出日志文件
- 修改打印格式
以下代码均在application.properties文件中写入
修改默认级别
logging.level.com.atguigu=trace
这行代码指定了Spring Boot会输出trace及以后级别的日志记录,level以后的路径是当前项目的路径

输出日志文件
输出日志有两种方法
- logging.file
- logging.path
logging.file
输出指定文件名的日志,通过这个我们可以指定输出的日志文件名的名称
logging.file=f:/springlog/springboot.log
我们会在这个路径下生成一个叫springboot.log的日志,如果没有指定路径,会在当前项目下生成springboot.log日志
logging.path
在f盘下创建springlogpath文件夹和里面的log文件;使用 spring.log 作为默认文件
logging.path=f:/springlogpath
| logging.file | logging.path | Example | Description |
|---|---|---|---|
| (none) | (none) | 只在控制台输出 | |
| 指定文件名 | (none) | my.log | 输出日志到my.log文件 |
| (none) | 指定目录 | /var/log | 输出到指定目录的 spring.log 文件中 |
如果都不指定,默认只在控制台输出,如果同时指定,只有logging.file生效
修改打印格式
我们可以自定义日志输入的格式同样有两种方法
- logging.pattern.console
- logging.pattern.file
logging.pattern.console
修改控制台输出日志格式
logging.pattern.console=%d{yyyy-MM-dd} ----> [%thread] ----> %-5level---> %logger{50} ---> %msg%n
我们用---->的方式来作为控制台打印日志的连接

如我们所预期的一样,每个log中都是用的---->来连接的
logging.pattern.file
修改指定文件中输出日志的格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n
日志文件里我们用===来作为连接看效果

日志输出格式:
%d表示日期时间,
%thread表示线程名,
%-5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符
-->
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
这个就是日志输出的格式,大家可以照着这个来自定义自己的日志
指定配置
我们可以给类路径下放上每个日志框架自己的配置文件;SpringBoot就不使用他默认配置的了
| 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 |
这是每个日志对应的配置文件名称
如果我们放的是logback.xml,他能直接就被日志框架识别,
而Spring Boot官网建议我们用的是logback-spring.xml来扩展高级功能
如果我们放的是logback-spring.xml日志框架就不能识别配置文件从而直接加载日志的配置项,由Spring Boot解析日志配置,我们可以使用Spring Boot的高级Profile功能
<springProfile name="dev">
<!-- configuration to be enabled when the "staging" profile is active -->
可以指定某段配置只在某个环境下生效
</springProfile>
在配置文件中加上这个标签就可以某段配置只在指定环境下生效,比如这段代码就会在dev环境下才生效
切换日志框架
我们可以在Spring Boot官网找到这张图片

如果我们想使用log4j,那么我们需要导入log4j一系列的所有包。slf4j-api,slf4j-log4j12,log4j
Spring Boot日志使用到这就到达尾声了,如果有说的不对的地方还望指出,一起进步。

Spring Boot日志使用的更多相关文章
- Springboot 系列(四)Spring Boot 日志框架
注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 Spring 框架选择使用了 JCL 作为默 ...
- Spring Boot日志集成实战
Spring Boot日志框架 Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用 ...
- Spring Boot 日志配置
Spring Boot 日志配置 默认日志 Logback: 默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台.在运行应用程序和其他例子时,你应该已经看到很 ...
- Spring Boot 日志记录 SLF4J
Spring Boot 日志记录 SLF4J 2016年01月12日 09:25:28 阅读数:54086 在开发中打印内容,使用 System.out.println() 和 Log4j 应当是人人 ...
- Spring Boot日志集成
Spring Boot日志框架 Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用 ...
- 让你的spring-boot应用日志随心所欲--spring boot日志深入分析
1.spring boot日志概述 spring boot使用Commons Logging作为内部的日志系统,并且给Java Util Logging,Log4J2以及Logback都提供了默认的配 ...
- 54. spring boot日志升级篇—logback【从零开始学Spring Boot】
在<44. Spring Boot日志记录SLF4J>章节中有关相关的介绍,这里我们在深入的了解下logback框架. 为什么要使用logback ? --在开发中不建议使用System. ...
- 52. spring boot日志升级篇—log4j多环境不同日志级别的控制【从零开始学Spring Boot】
在上一章节中我们介绍了,仅通过log4j-spring.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用DEBUG级别,在测试环境可能需 ...
- 50. Spring Boot日志升级篇—log4j【从零开始学Spring Boot】
如果你使用的是spring boot 1.4.0版本的话,那么你可能需要配合以下文章进行学习 90.Spring Boot 1.4 使用log4j错误[从零开始学Spring Boot] Log4j是 ...
随机推荐
- 快速写入Xml文件
我们在做一些操作的时候会需要生成日志,Xml文件就是我们常用的一种日志文件. 普通操作Xml文件的代码遇到大数据量的话就很慢了. 用这个生成Xml文件的话,即使数据量很大,也很快 private vo ...
- 简单图标转xaml代码
工具 PhotoShopCC(2017) Blend 2017 原图 步骤 1,使用钢笔工具勾勒出大致路径 2,将工作路径转为形状路径 3,图层右键->复制SVG <svg xmlns=& ...
- 建立Linux计划命令crontab
crontab翻译:排程,命令 crontab从输入设备输入命令,并将其放入crontab文件,供守护进程crond读取并执行,crond在后台每一分钟执行一次 crontab -e:创建计划命令,进 ...
- 纯CSS3创意loading文字特效
快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中. <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...
- Dependency Injection 筆記 (1)
<.NET 依賴注入>連載 (1) 本文从一个基本的问题开始,点出软件需求变动的常态,以说明为什么我们需要学习「依赖注入」(dependency injection:简称 DI)来改善设计 ...
- Codlility---MinPerimeterRectangle
Task description An integer N is given, representing the area of some rectangle. The area of a recta ...
- 台电P89s mini root教程
根据论坛内的一些内容再结合自己的使用心得整理如下,本人双11购入P89s mini root成功 自带软件什么的都不见了 以下是个人root过程,有不一样的地方欢迎交流,说实话我也不是很懂 1.升级 ...
- tortoisegit密码找回之抓包法
因为一直用tortoisegit记住密码(此方法只适用于tortoisegit有记住密码),昨天需要登陆gitlab发现密码忘记了,用了N个常用默认密码都不对:和度娘交流一会儿也无果,gitlab里的 ...
- Python-基本数据类型(list,tuple)
一. 列列表 1.1 列列表的介绍 列表是python的基础数据类型之⼀一,其他编程语言也有类似的数据类型. 比如JS中的数 组, java中的数组等等. 它是以[ ]括起来, 每个元素用' , ...
- 高性能高并发网站架构,教你搭建Redis5缓存集群
一.Redis集群介绍 Redis真的是一个优秀的技术,它是一种key-value形式的NoSQL内存数据库,由ANSI C编写,遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Val ...