SpringBoot初识日志
SpringBoot初识日志
1、市面上的日志框架:
JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…
| 日志门面(日志的抽象层) | 日志实现 |
|---|---|
| SLF4j 、Jboss-logging、JCL(Jakarta Commons Logging) | Log4j JUL(java.util.logging) Log4j2 Logback |
左边是抽象层,右边是他的实现
日志门面:SLF4J;
日志实现:Logback;
SpringBoot:底层是Spring框架,Spring框架默认是用JCL;
SpringBoot选用SLF4j和logback
2、SLF4j的使用
1、如何在系统中使用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以后,配置文件还是做成日志实现框架本身的配置文件。
统一日志记录
比如说在使用其他框架的时候,Spring使用的日志框架是Commons-logging,Hibernate使用的是Jboss-logging等等。
我们要想统一日志记录,就比如全部改成SLF4j和Logback日志框架组合,该怎样做?
这时的slfj已经帮我们想好了解决方案,
如果日志框架是Commons-logging,想转成slf4j的使用,首先要去掉原来的日志依赖Commons-logging,再导入jcl-over-slf4j.jar,这个jar里面含有Commons-logging的实现类,也包含了slf4j的整合,所以可以转为对slf4j抽象层的使用。其余的日志框架也都有对应替换的jar包,这里不进行一一解释。
总结:如何让系统中的所有日志都统一到slf4j
- 将系统中其他日志框架先排除去
- 用各个对应日志框架转为slf4j的中间jar包替换原有的日志框架
- 导入slf4j其他实现
3、SpringBoot日志关系
下图关系依赖是springboot2.2.4

总结:
SpringBoot底层使用的slf4j+Logback的方式进行的日志记录
SpringBoot也罢其他的日志都替换成了slf4j;
中间替换包例如 log4j-to-slf4j

它里面具体的操作还是对SLF4j的操作
SpringBoot是Spring的一套快速配置脚手架,但是Spring内涵的日志框架是Commons-logging,在SpringBoot2.0+,SpringBoot并没有加载Spring的日志框架,直接使用slf4j日志作为统一,Logback是对slf4j抽象层的实现。
注意:如果要引入其他框架,一定要把这个框架的默认日志依赖移除掉。
SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可。
4、日志的使用
1、默认配置
root级别就是默认的级别,springboot日志root级别是info。
@Test
public void contextLoads() {
//记录日志
Logger logger = LoggerFactory.getLogger(getClass());
//日志的级别由低到高: trace<debug<info<warn<error;输出日志的时候只会输出当前日志级别及其以上的日志信息 logger.trace("logger trace level ...");
logger.debug("logger debug level...");
//springboot默认日志级别是info
logger.info("logger info level...");
logger.warn("logger warn level...");
logger.error("logger error level..."); }

要想修改隔离级别
在application配置文件中设置,例如将日志默认级别设置成trace,最低的。
logging.level.cn.edu.nyist.springboot03logging=trace
cn.edu.nyist.springboot03logging是对应的项目名的路径
日志输出路径和日志输出文件如果都不在配置文件中指定,默认只会在控制台输出
logging.path=输出日志的指定路径
# 在当前根目录下创建spring和里面的log文件夹,默认日志文件名是spring.log
logging.path=/spring/log
logging.file=输出的日志文件名,也可以指定路径;例如logging.file=D:/springboot.log;指定输出到D盘的xxx.log文件,文件没有会自行创建,如果不指定路径就会在当前项目下创建日志文件。
#输出到文件中的日志格式
logging.pattern.file=%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
#输出到控制台的日志格式
logging.pattern.console=%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
2、指定配置
| Logging System | Customization |
|---|---|
| Logback | logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy |
| Log4j2 | log4j2-spring.xml or log4j2.xml |
| JDK (Java Util Logging) | logging.properties |
直接在resources目录下创建日志配置文件,例如使用logback日志系统,创建logback.xml或者logback-spring.xml;
但是这两个有什么区别吗?
这里官方文档上推荐我们创建带spring的配置文件,因为这样可以使用SpringBoot的一些高级Profile功能,而logback.xml就不能使用,如果logback.xml使用了Profile功能,但是SpringBoot并不会解析它,所以就会报错。
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]]
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]
Profile-specific Configuration功能
<springProfile name="dev">
<!-- configuration to be enabled when the "dev" profile is active -->
这里指定了接下来的配置在dev环境下执行
</springProfile>
切换日志框架
将logback切换成log4j2
先去掉相关依赖[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述
添加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>

SpringBoot初识日志的更多相关文章
- SpringBoot与日志框架2(日志内斗)
一.SpringBoot如何引入slf4j+logback框架的呢? 在POM文件中 <dependency> <groupId>org.springframework.boo ...
- SpringBoot与日志框架1(基本使用)
一.日志框架 1.无论在什么系统,日志框架都是一个重要角色,所以理解和用好日志框架是相当重要的:像JDBC一样,日志框架分为接口层的门面和具体的实现组成. 2.市面上的产品: 2.1门面:SLF4J( ...
- Springboot的日志管理&Springboot整合Junit测试&Springboot中AOP的使用
==============Springboot的日志管理============= springboot无需引入日志的包,springboot默认已经依赖了slf4j.logback.log4j等日 ...
- java框架之SpringBoot(3)-日志
市面上的日志框架 日志抽象层 日志实现 JCL(Jakarta Commons Logging).SLF4J(Simple Logging Facade For Java).JBoss-Logging ...
- SpringBoot整合日志
Java日志 日志的接口层.抽象层 日志的实现 JCL(Jakarta Commons Logging) SLF4J(Simple Logging Facade for Java) Jboss-Log ...
- SpringBoot的日志
1.日志框架小张:开发一个大型系统:1.System.out.pringtln("");将关键数据打印在控制台:去掉?写在一个文件?2.框架来记录系统的一些运行信息:日志:zhan ...
- Springboot与日志
日志框架 比如开发一个大型系统:1.System.out.println(""):将关键数据打印在控制台:去掉?写在一个文件?2.框架来记录系统的一些运行时信息:日志框架 :riz ...
- SpringBoot的日志管理
SpringBoot的日志管理 SpringBoot关于日志的官方文档 1.简述 SpringBoot官方文档关于日志的整体说明 本博客基于SpringBoot_1.3.6大家请先简单看下这篇英文的官 ...
- springboot+logback日志输出企业实践(下)
目录 1.引言 2. 输出 logback 状态数据 3. logback 异步输出日志 3.1 异步输出配置 3.2 异步输出原理 4. springboot 多环境下 logback 配置 5. ...
随机推荐
- POJ2466 棋盘覆盖
一张\(n*m\)的棋盘,有\(k\)个点不能被覆盖,问其余点能不能被\(1*2\)的小矩形完全覆盖,多测 这题先输入\(m\)是什么鬼啊!!! 其实是一个比较裸的二分图判定,把\(k\)个点挖去然后 ...
- webstorm实现手机预览页面
效果:在webstorm中开发页面,复制该页面在电脑中的浏览网址,发给手机,在手机上点击链接,可以直接访问本地开发的页面.并且,电脑上修改后保存,手机上刷新即可看到效果. 步骤: 1.webstorm ...
- [JDK8]Map接口与Dictionary抽象类
package java.util; 一.Map接口 接口定义 public interface Map<K,V> Map是存放键值对的数据结构.map中没有重复的key,每个key最多只 ...
- 博流BL602&BL604开发板介绍
在2020松山湖论坛上,博流智能科技(南京)有限公司销售副总裁刘占领介绍了基于RISC-V核的低功耗.高可靠Wi-Fi+BLE二合一SoC芯片BL602.主要应用领域包括人工智能与工业互联网,特别是电 ...
- MySQL增强半同步的搭建实验,和一些参数的个人理解
关于参数理解,已补充实验,可以查看: rpl_semi_sync_master_wait_no_slave 参数研究实验 环境信息 role ip port hostname master 192.1 ...
- SQL注入-DNS注入(二)
其实就是盲注的简化版本,不过这种方式确实简单,不需要写py脚本一点点去跑 参考文章: https://www.jianshu.com/p/c805209244c2 这 ...
- Java与C#的代码区别
Java和C#都是编程的语言,它们是两个不同方向的两种语言 相同点: 他们都是面向对象的语言,也就是说,它们都能实现面向对象的思想(封装,继承,多态) 区别: 1.c#中的命名空间是namespace ...
- [.NET] - 在Create一个RSA密钥的是要注意的长度问题
有时候我们需要自己手动的创建RSA密钥,但是在密钥创建之后,在使用的时候会有类似密钥长度不正确的错误信息被抛出,那可能就是在创建一个RSA密钥的时候,对于的elements长度没设置正确,所以的ele ...
- 我都xxx岁了,还能继续做开发吗?
前言 今天纯文字,阅读时间10分钟左右 最近在看一本书<大型网站技术架构:核心原理与案例分析>,可以说是非常枯燥的一本书,在开头几章讲解了网站的发展,介绍了一些架构中的常用名词.虽然有点枯 ...
- 国产的开源数据库——GitHub 热点速览 Vol.52
作者:HelloGitHub-小鱼干 本以为本周的 GitHub 和十二月一样平平无奇就那么度过了,结果 BackgroundMattingV2 重新刷新了本人的认知,还能这种骚操作在线实时抠视频去背 ...