spring boot-7.日志系统
日志系统分为两部分,一部分是日志抽象层,一部分是日志实现层。常见的日志抽象层JCL,SLF4J,JBoss-Logging,日志实现层有logback,log4j,log4j2,JUL。日志抽象层的功能是提供一个统一的调用入口,而真正得日志实现功能有日志实现层来做。如果需要使用日志功能,则需要选取一个日志抽象层和一个日志实现层。
slf4j 是一个日志抽象层框架,他需要和其他日志实现框架配合才能实现日志功能,如下图所示,如果单独使用slf4j则会输出空,slf4j和logback配合使用的话,还需导入logback相关的jar包,如果和其他的日志实现框架配合使用的话,不仅需要导入日志实现框架还需要导入一个转换层,如log4j 的slf4-log4j12.jar。不管使用哪种日志实现框架,日志的配置文件还是需要使用日志实现框架的配置文件,这个文件是被日志框架直接读取的。
1.SLF4J的使用
2.如何统一使用slf4j 记录日志
由于系统导入很多依赖,每个依赖可能已经在依赖其他的的日志框架(如spring 依赖 Commons logging),如何让他们统一使用slf4j记录日志呢?sjf4j 的官方文档 中https://www.slf4j.org/legacy.html 有介绍
如上图,具体做法是:
(1)将框架已经依赖的其他日志框架先排除掉
(2)导入中间的适配层jar包(jul-to-slf4j.jar等等)
(3)再导入需要的日志实现jar包。
3.spring boot 的日志实现
Spring boot 底层的日志实现是通过slf4j + logback实现的。下图是spring boot 的依赖关系,spring-boot-starter-logging是spring boot 的日志启动器。它又分别依赖了logback-classic 和 log4j-to-slf4j,jul-to-slf4j ,这两个jar包的作用就是上面讲的,讲其他的日志框架转换成slf4j,作为一个中间适配层来使用的。
spring boot 会为我们自动适配成slf4j + logback 的日志记录框架,如果需要引入其他额外的jar包,怎么能让新引入的jar也使用上slf4j+logback 来记录日志呢?
只需要做一件就够了:如果新引入的jar包中含有其他日志框架,我们只要将这个日志框架从jar包中排除即可。spring boot 已经导入相应的适配层的包,会自动顶替被排除包的功能。例如 spring 排除commons-logging 包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
4.spring boot 的日志使用
spring boot 已经默认配置好了日志
Logger logger = LoggerFactory.getLogger(xxx.class);
获取日志记录器,使用loger.info 、logger.debug 等方法记录日志,如果需要调整默认的日志配置,则在全局配置文件中修改配置即可,spring boot 默认的root级别为info 级别,输出info及以上级别的日志信息。同时也可以日志的输出格式。
%d表示日期时间,
%thread表示线程名,
%-5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符
logging.file 和 logging.path 如果都不指定,则只会在控制台输出,不会在文件输出。
logging.file 可以指定生成日志文件的名称或者日志文件的名称及位置,如果不指定位置只指定了名称,在会在当前的项目路径下生成日志文件。
logging.path 指定日志文件的位置,默认使用spring.log 作为日志文件的名称。
# 在控制台输出的日志的格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
# 指定文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n
#指定日志文件大小,超过指定的值,则新建一个,默认10M
logging.file.max-size=20M
#要保存的存档日志文件的最大数量
logging.file.max-history=10
5.使用自定义的配置文件
官方文档的26.5章节开始介绍了使用自定义配置文件的办法。使用方法是在类路径上放日志框架的配置文件即可
官方推荐使用带-spring 的配置文件,带-sping 后缀的和不带后缀的区别是:带后缀的后被spring 识别,可以使用一些spring 的高级特性,不带后缀的只会被日志框架实现。
官方文档的26.6.1 和26.6.2介绍了两种告诫特性,分别是profile 和 Environment ,规定了再特殊条件下才可生效。
6.更改spring boot 默认的日志框架
如果不想使用spring boot 默认的日志框架,想切换成其他的日志实现框架。
1.从spring-boot-starter 中排除logback 的jar包
2.引入其他日志实现框架的jar包
切换成slf4j+log4j的方式:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>logback-classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
<exclusion>
<artifactId>log4j-over-slf4j</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency> <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
切换成slf4j+log4j2 的方式:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
spring boot-7.日志系统的更多相关文章
- Spring Boot系列——日志配置
日志,通常不会在需求阶段作为一个功能单独提出来,也不会在产品方案中看到它的细节.但是,这丝毫不影响它在任何一个系统中的重要的地位. 为了保证服务的高可用,发现问题一定要即使,解决问题一定要迅速,所以生 ...
- Spring Boot 之日志记录
Spring Boot 之日志记录 Spring Boot 支持集成 Java 世界主流的日志库. 如果对于 Java 日志库不熟悉,可以参考:细说 Java 主流日志工具库 关键词: log4j, ...
- 【spring boot】8.spring boot的日志框架logback使用
在继续上一篇的Debug调试之后,把spring boot的日志框架使用情况逐步蚕食. 参考:http://tengj.top/2017/04/05/springbo 开篇之前,贴上完整applica ...
- Spring Boot默认日志logback配置解析
前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如何使用? 正文 Sp ...
- Spring Boot与日志
目录 1.日志框架 2.市面上的日志框架 2.1 下表行间无任何对应关系 2.2 日志门面:slf4j 2.3 日志实现:logback 2.4 Spring Boot怎么做的呢? 3.slf4j的使 ...
- Spring Boot 自定义日志详解
本节内容基于 Spring Boot 2.0. 你所需具备的基础 什么是 Spring Boot? Spring Boot 核心配置文件详解 Spring Boot 开启的 2 种方式 Spring ...
- Spring Boot Log4j2 日志学习
简介 Java 中比较常用的日志工具类,有: Log4j. SLF4j. Commons-logging(简称jcl). Logback. Log4j2(Log4j 升级版). Jdk Logging ...
- [日志] spring boot + logback 日志输出配置
一.输出日志到控制台 springboot有很多starter(参考starter)方便快速构建项目依赖组件,logback是springboot默认的日志组件,启动即可看到打印在控制台输出的info ...
- Spring Boot Log 日志使用教程
我们编写任何 Spring Boot 程序,可能绕不开的就是 log 日志框架(组件). 在大多数程序员眼中日志是用来定位问题的.这很重要. 本项目源码下载 注意本项目提供的源码已在后期重新编写,有部 ...
- Spring Boot的日志配置
一.配置logback日志 Spring Boot默认使用logback打印日志 需要增加依赖 <groupId>org.springframework.boot</groupId& ...
随机推荐
- lazarus中的TSQLQuery注意事项
lazarus中的TSQLQuery相当于delphi中的TClientDataSet,必须 SQLQuery.ApplyUpdates; SQLTransaction.Commit; 数据才能提 ...
- JS实现表格隔行变色
用到的鼠标事件:(1)鼠标经过 onmouseover:(2)鼠标离开 onmouseout 核心思路:鼠标经过 tr 行的时候,当前行会改变背景颜色,鼠标离开的时候去掉背景颜色. 注意:第一行(th ...
- OpenCV笔记(4)(直方图、傅里叶变换、高低通滤波)
一.直方图 用于统计图片中各像素值: # 画一个图像各通道的直方图 def draw_hist(img): color = ('b', 'g', 'r') for i, col in enumerat ...
- .netcore 图片处理
.netcore 图片处理 /// <summary> /// 根据文件类型和文件名返回新路径 /// </summary> /// <param name=" ...
- 【杂题】[ARC070F] Honest Or Unkind【交互】
Description 这是一道交互题 有A+B个人,编号从0~A+B-1,其中有A个人是诚实的,B个人是居心叵测的. 你想知道每个人是诚实的还是居心叵测的. 询问可以用二元组(i,j)表示,代表问编 ...
- AtCoder AGC036D Negative Cycle (图论、DP)
题目链接 https://atcoder.jp/contests/agc036/tasks/agc036_d 题解 这都是怎么想出来的啊..目瞪口呆系列.. 第一步转化至关重要: 一张图中不存在负环意 ...
- [LOJ6433][PKUSC2018]最大前缀和:状压DP
分析 我们让每个数列在第一个取到最大前缀和的位置被统计到. 假设一个数列在\(pos\)处第一次取到最大前缀和,分析性质,有: 下标在\([1,pos]\)之间的数形成的数列的每个后缀和(不包括整个数 ...
- Java并发编程的艺术笔记(七)——CountDownLatch、CyclicBarrier详解
一.等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作,像加强版的join.(t.join()是等待t线程完成) 例: (1)开启多个线程 ...
- 关于Spring3与Jdk8 遇到的问题ArrayIndexOutOfBoundsException:xxxxxx
Spring 3不完全兼容JDK8. 需要升级到Spring 4才能使用Java 8 lambda表达式.
- Oracle 递归查询 (start with ...connect by ...prior)
1.connect by 是结构化查询中用到的,其基本语法是:select … from tablename start with 条件1connect by 条件2where 条件3;例:selec ...