【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 ...
随机推荐
- ajax的五种状态
ajax的五种状态(readyState ) 0 - (未初始化)还没有调用send()方法 1 - (载入)已调用send()方法,正在发送请求 2 - (载入完成)send()方法执行完成,已经接 ...
- [从源码学设计]蚂蚁金服SOFARegistry之推拉模型
[从源码学设计]蚂蚁金服SOFARegistry之推拉模型 目录 [从源码学设计]蚂蚁金服SOFARegistry之推拉模型 0x00 摘要 0x01 相关概念 1.1 推模型和拉模型 1.1.1 推 ...
- JavaScript:正则表达式匹配规则
正则表达式的语法规则: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- Python测试框架unittest
Python测试框架unittest 一.unittest框架 (1)unittest特点 1.python自带的单元测试框架,不需要安装 2.用例执行互不干扰 3.提供不同范围的setUp和tear ...
- 2020-2021-1 20209307《Linux内核原理与分析》第三周作业
一.计算机的三大法宝 存储程序计算机.函数调用堆栈机制.中断机制 二.堆栈 堆栈的作用:记录函数调用框架.传递函数参数.保存返回值的地址.提供局部变量存储空间 堆栈操作:push栈顶地址减少四个字节. ...
- django配置-mysql数据库相关配置
Django3版本之前的配置 1. Django默认配置的数据库是sqlite 2. 使用mysql数据库需要下载的包 pip3 install PyMySQL 3. Django配置PyMySQL ...
- Spring Data JPA 整合Spring
1.1 Spring Data JPA 与 JPA和hibernate之间的关系 JPA是一套规范,内部是有接口和抽象类组成的.hibernate是一套成熟的ORM框架,而且Hibernate实现 ...
- 单机编排之Docker Compose
当在宿主机启动较多的容器时候,如果都是手动操作会觉得比较麻烦而且容器出错,这个时候推荐使用docker 单机编排工具docker compose,Docker Compose 是docker容器的一种 ...
- openstack高可用集群15-后端存储技术—GlusterFS(分布式存储)
- Centos7路由设置
再添加路由时,很多时候都是采用命令行用route添加的.但是在机器重启后.就失效了.这里也是参考了几位博主的经验 作出以下记载 一:路由表常用设置 1.route命令路由表常用设置: //添加到主机的 ...