【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 ...
随机推荐
- mock.js 和easy-mock使用
mock.js 1.项目中引入mock.js <script src="../static/js/mock.js" type="text/javascript&qu ...
- POJ1422
题目大意: 一个有向无环图,求最小路径覆盖 板子题... 把每个点拆成\(x\)和\(x^{'}\) \((u,v)\)有一条边则\(u\)向\(v^{'}\)连一条边,然后跑最大匹配,最小路径覆盖= ...
- 写了两年的一本.NET书现在终于在北京最大的新华书店上架了,然而我却很难找到工作了。
两年前,有几个出版社的编辑在QQ上跟我联系写书的事情,好奇为什么出版社会找到我这样一个很普通的.NET技术人员,其中一个编辑说他们分析了很多博客园博主的文章阅读量和写作质量,觉得我的博客还是不错的.尽 ...
- vim设置永久显示行号
命令行输入下面的命令编辑: vim ~/.vimrc 内容: set nu complete! 搞定
- js上 二十、综合案例
二十.综合案例 题目一: **1. ** 数组随机 描述,写randomArray函数,传递一个数组,传递一个数值,返回一个指定个数的随机的新数组,不允许有重复数据 用例: randomArray([ ...
- Netty源码解析 -- PoolSubpage实现原理
前面文章说了PoolChunk如何管理Normal内存块,本文分享PoolSubpage如何管理Small内存块. 源码分析基于Netty 4.1.52 内存管理算法 PoolSubpage负责管理S ...
- pandas的学习5-导入导出数据
import pandas as pd ''' pandas可以读取与存取的资料格式有很多种,像csv.excel.json.html与pickle等-, 详细请看官方说明文件 ''' # read ...
- 从零到一快速搭建个人博客网站(域名自动跳转www,二级域名使用)(二)
前言 本篇文章是对上篇文章从零到一快速搭建个人博客网站(域名备案 + https免费证书)(一)的完善,比如域名自动跳转www.二级域名使用等. 域名自动跳转www 这里对上篇域名访问进行优化,首先支 ...
- 第九章 Nacos Config--服务配置
今天咱们接着 上一篇 第八章 SMS–短信服务 继续写 SpringCloud Alibaba全家桶 -> 第九章 Nacos Config–服务配置,废话不多说,开干 9.1 服务配置中心介绍 ...
- C#中RDLC控制某列的显示隐藏
使用 1.添加参数IsEnable(用于控制显示或隐藏)2.在RDLC页面,需要控制的列上,右键,列的可见性...,基于表达式隐藏或显示3.输入 IIF(Parameters!IsEnable.Val ...