【SpringBoot1.x】SpringBoot1.x 日志
SpringBoot1.x 日志
日志框架
市面上有很多日志框架,一个日志框架一般包括抽象层和实现。
SpringBoot,它的底层是 Spring,而 Spring 框架默认是用 JCL(java.util.logging),但是 SpringBoot 选用 slf4j(抽象) 和 logback(实现)。
slf4j 使用
开发时,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
SLF4J 不依赖任何特殊类的装载机。实际上,每个 SLF4J 绑定在编译时都进行了硬连线,以使用一个且仅一个特定的日志记录框架。图形化说明:

每一个日志的实现框架都有自己的配置文件。使用 slf4j 以后,配置文件还是使用日志实现框架自己本身的配置文件。
为了统一日志记录,即使是别的框架也统一使用 slf4j 进行输出。为了实现这个目的,必须桥接其他 API,SLF4J 附带了几个桥接模块,这些模块会将对 log4j,JCL 和 java.util.logging API 的调用重定向为行为,就好像是对 SLF4J API 进行的操作一样。如下图:

如何让系统中所有的日志都统一到 slf4j,使用如下步骤:
- 将系统中其他日志框架先排除出去;
- 用中间包来替换原有的日志框架;
- 导入 slf4j 其他的实现
SpingBoot 日志依赖关系:

SpringBoot 能自动适配所有的日志,而且底层使用 slf4j+logback 的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架移除掉即可。
比如说,Spring 用的是 commons-logging,但是 SpringBoot 也进行了如下处理:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐core</artifactId>
<exclusions>
<exclusion>
<groupId>commons‐logging</groupId>
<artifactId>commons‐logging</artifactId>
</exclusion>
</exclusions>
</dependency>
日志使用
默认配置
SpringBoot 默认帮我们配置好了日志,可以直接使用。
package cn.parzulpan;
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;
@RunWith(SpringRunner.class)
@SpringBootTest
public class LoggingApplicationTests {
// 记录器
Logger logger = LoggerFactory.getLogger(getClass());
@Test
public void contextLoads() {
// System.out.println();
// SpringBoot 默认给我们使用的是 info 级别的,没有指定级别的就用 SpringBoot 默认规定的级别
// 日志的级别为 trace < debug < info < warn < error,可以调整输出的日志级别
// 日志就只会在这个级别以后的高级别生效,所以不会输出 trace 和 debug
logger.trace("这是trace日志...");
logger.debug("这是debug日志...");
logger.info("这是info日志...");
logger.warn("这是warn日志...");
logger.error("这是error日志...");
}
}
可以看到,控制台输出:
2020-12-27 23:48:25.385 INFO 8146 --- [ main] cn.parzulpan.LoggingApplicationTests : 这是info日志...
2020-12-27 23:48:25.385 WARN 8146 --- [ main] cn.parzulpan.LoggingApplicationTests : 这是warn日志...
2020-12-27 23:48:25.385 ERROR 8146 --- [ main] cn.parzulpan.LoggingApplicationTests : 这是error日志...
日志输出格式:
- %d 表示日期时间
- %thread 表示线程名,
- %‐5level 级别从左显示5个字符宽度
- %logger{50} 表示 logger 名字最长 50 个字符,否则按照句点分割
- %msg 日志消息
- %n 换行符
- 例子:
%d{yyyy‐MM‐dd HH:mm:ss.SSS} [%thread] %‐5level %logger{50} ‐ %msg%n
为了可以输出 trace 和 debug 级别日志,可以修改 SpringBoot 默认配置
# 修改日志级别
logging.level.cn.parzulpan = trace
# 可以指定日志完整的路径,不指定路径在当前项目下生成 springboot.log 日志
logging.file=logging/springboot.log
# 在当前磁盘的根路径下创建 spring 文件夹和里面的 log 文件夹,使用 spring.log 作为默认文件
#logging.path=/spring/log
# 在控制台输出的日志的格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n
# 指定文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n
指定配置
练习和总结
【SpringBoot1.x】SpringBoot1.x 日志的更多相关文章
- springboot1.5和jpa利用HikariCP实现多数据源的使用
背景 现在已有一个完整的项目,需要引入一个新的数据源,其实也就是分一些请求到从库上去 技术栈 springboot1.5 (哎,升不动啊) 思路 两个数据源,其中一个设置为主数据源 两个事物管理器,其 ...
- 【SpringBoot1.x】SpringBoot1.x 任务
SpringBoot1.x 任务 文章源码 异步任务 在 Java 应用中,绝大多数情况下都是通过同步的方式来实现交互处理的.但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使 ...
- 【SpringBoot1.x】SpringBoot1.x 检索
SpringBoot1.x 检索 文章源码 概念 Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本.数字.地理空间.结构化和非结构化数据.Elasticse ...
- 【SpringBoot1.x】SpringBoot1.x 消息
SpringBoot1.x 消息 文章源码 概述 大多应用中,可通过消息服务中间件来提升系统异步通信.扩展解耦能力. 消息服务有两个重要概念,即消息代理(message broker)和目的地(des ...
- 【SpringBoot1.x】 Docker
SpringBoot1.x Docker 核心概念 Docker 是一个开源的应用容器引擎,是一个轻量级容器技术.Docker 支持将软件编译成一个镜像,然后在镜像中各种软件做好配置,将镜像发布出去, ...
- 记 SpringBoot1.* 转 Springoot2.0 遇到的问题
1.拦截器问题 到2.0之后在配置文件中写 static-path-pattern: /static/** 已经不起作用(2.0需要在方法中配置) SpringBoot1.*写法 @Configura ...
- SpringBoot1.x与监控(六)
由于2.x和1.x的监控不一样,此处先讲1.x 一 SpringBoot1.x监控 pom.xml <dependency> <groupId>org.springframew ...
- SpringBoot1.x升级SpringBoot2.x踩坑之文件上传大小限制
SpringBoot1.x升级SpringBoot2.x踩坑之文件上传大小限制 前言 LZ最近升级SpringBoo框架到2.1.6,踩了一些坑,这里介绍的是文件上传大小限制. 升级前 #文件上传配置 ...
- 使用SpringBoot1.4.0的一个坑
时隔半年,再次使用Spring Boot快速搭建微服务,半年前使用的版本是1.2.5,如今看官网最新的release版本是1.4.0,那就用最新的来构建,由于部署环境可能有多套所以使用maven-fi ...
随机推荐
- HTML5中的自定义属性data-*
在html5中,给元素添加自定义属性需要用到data-*,比如data-name,添加完data-自定义属性之后通过元素的dataset属性来访问其值. dataset与getAttribute/se ...
- js 彻底搞懂事件循环机制 Event Loop
我们都知道javascript是单线程语言,就是因为单线程的特性,就不得不提js中的同步和异步 一.同步和异步 所谓单线程,无非就是同步队列和异步队列,js代码是自上向下执行的,在主线程中立即执行的就 ...
- 手把手教你写DI_2_小白徒手撸构造函数注入
小白徒手撸构造函数注入 在上一节:手把手教你写DI_1_DI框架有什么? 我们已经知道我们要撸哪些东西了 那么我们开始动工吧,这里呢,我们找小白同学来表演下 小白同学 :我们先定义一下我们的广告招聘纸 ...
- POJ3565
题目大意: 给定\(n\)个蚂蚁和\(n\)颗苹果树的坐标,要求每个蚂蚁爬到一颗苹果树旁,使得每个蚂蚁路线不相交且路线总长度最小,求每个蚂蚁爬到哪个苹果树旁? 首先假设有两只蚂蚁路径相交,那么这两个蚂 ...
- AcWing 337. 扑克牌
大型补档计划 题目链接 把状态实质相同的划分为一类... 发现花色.具体牌值的多少均不影响方案,考虑等效转化题目. 设 \(f[A][B][C][D][k]\) A 个 1 张相同,B 个 2 张相同 ...
- 【python接口自动化】- 使用json及jsonpath转换和提取数据
前言 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它可以让人们很容易的进行阅读和编写,同时也方便了机器进行解析和生成,适用于进行数据交互的场景,比如 ...
- Angular:管道和自定义管道
①管道的使用,更多管道在angular官网上有 <p>全部转为大写:{{'hahahah' | uppercase}}</p> <p>保留两位小数:{{1.4555 ...
- STL——容器(Set & multiset)的查找
1. set.find(elem); //查找elem元素,返回指向elem元素的迭代器. 1 #include <iostream> 2 #include <set> 3 4 ...
- 谁再问Servlet的问题,我就亲自上门来教学了
1. 概述 在这篇简短的文章中,我们将从概念上理解什么是servlet 和 servlet 容器以及它们是如何工作的. 同时,还能在请求.响应.会话对象.共享变量和多线程的上下文中看到它们的身影. 2 ...
- 钩子与API截获
http://www.pudn.com/Download/type/id/19.html