【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 ...
随机推荐
- AtCoder Regular Contest 107(VP)
Contest Link Official Editorial 比赛体验良好,网站全程没有挂.题面简洁好评,题目质量好评.对于我这个蒟蒻来说非常合适的一套题目. A. Simple Math Prob ...
- github拉去代码慢的处理方式(最简单)
https://github.com/xxx/xxxx 替换成 https://github.com.cnpmjs.org/xxx/xxxx 再去拉取,速度快很多,亲测可用
- 算法(Java实现)—— 二分搜索算法
二分搜索算法 有序数列才可用二分查找算法 思路分析 思路分析 首先确定该数组的中间下标mid = (left + right)/ 2 然后让需要查找的数findVal和arr[mid]比较 findV ...
- 性能监控工具nmon及nmon_analyser的使用
nmon和nmon_analyser下载地址: http://nmon.sourceforge.net/pmwiki.php?n=Site.Download 使用步骤: 1.nmon 根据系统版本 ...
- Python进阶——什么是描述符?
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 在 Python 开发中,你可能听说过「描述符」这个概念,由于我们很少直接使用它,所以大部分开发人员 ...
- Dovecot邮件服务器的正确安装方法
Dovecot邮件服务器的正确安装方法 apt remove dovecot-coredpkg -P dovecot-core sudo apt install dovecot-imapd dovec ...
- 母鸡下蛋实例:多线程通信生产者和消费者wait/notify和condition/await/signal条件队列
简介 多线程通信一直是高频面试考点,有些面试官可能要求现场手写生产者/消费者代码来考察多线程的功底,今天我们以实际生活中母鸡下蛋案例用代码剖析下实现过程.母鸡在鸡窝下蛋了,叫练从鸡窝里把鸡蛋拿出来这个 ...
- 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群
庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介 前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...
- Spring-构造注入&注解注入&代理模式&AOP
1. 课程介绍 1. 依赖注入;(掌握) 2. XML自动注入;(掌握) 3. 全注解配置;(掌握) 4. 代理模式;(掌握) 5. AOP;(掌握) 依赖注入;(掌握) 2.1. 构 ...
- mysql 双主复制 windows10
1. 整体思路 MySQL开始复制是很简单的过程,不过,根据特定的应用场景,都会在基本的步骤上有一些变化.最简单的场景就是一个新安装的master和slave,整个过程如下:(1)在每个服务器上创建一 ...