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

  1. 将系统中其他日志框架先排除去
  2. 用各个对应日志框架转为slf4j的中间jar包替换原有的日志框架
  3. 导入slf4j其他实现

3、SpringBoot日志关系

下图关系依赖是springboot2.2.4

总结:

  1. SpringBoot底层使用的slf4j+Logback的方式进行的日志记录

  2. SpringBoot也罢其他的日志都替换成了slf4j;

  3. 中间替换包例如 log4j-to-slf4j

它里面具体的操作还是对SLF4j的操作

  1. SpringBoot是Spring的一套快速配置脚手架,但是Spring内涵的日志框架是Commons-logging,在SpringBoot2.0+,SpringBoot并没有加载Spring的日志框架,直接使用slf4j日志作为统一,Logback是对slf4j抽象层的实现。

  2. 注意:如果要引入其他框架,一定要把这个框架的默认日志依赖移除掉。

    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

  1. 先去掉相关依赖[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

  2. 添加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初识日志的更多相关文章

  1. SpringBoot与日志框架2(日志内斗)

    一.SpringBoot如何引入slf4j+logback框架的呢? 在POM文件中 <dependency> <groupId>org.springframework.boo ...

  2. SpringBoot与日志框架1(基本使用)

    一.日志框架 1.无论在什么系统,日志框架都是一个重要角色,所以理解和用好日志框架是相当重要的:像JDBC一样,日志框架分为接口层的门面和具体的实现组成. 2.市面上的产品: 2.1门面:SLF4J( ...

  3. Springboot的日志管理&Springboot整合Junit测试&Springboot中AOP的使用

    ==============Springboot的日志管理============= springboot无需引入日志的包,springboot默认已经依赖了slf4j.logback.log4j等日 ...

  4. java框架之SpringBoot(3)-日志

    市面上的日志框架 日志抽象层 日志实现 JCL(Jakarta Commons Logging).SLF4J(Simple Logging Facade For Java).JBoss-Logging ...

  5. SpringBoot整合日志

    Java日志 日志的接口层.抽象层 日志的实现 JCL(Jakarta Commons Logging) SLF4J(Simple Logging Facade for Java) Jboss-Log ...

  6. SpringBoot的日志

    1.日志框架小张:开发一个大型系统:1.System.out.pringtln("");将关键数据打印在控制台:去掉?写在一个文件?2.框架来记录系统的一些运行信息:日志:zhan ...

  7. Springboot与日志

    日志框架 比如开发一个大型系统:1.System.out.println(""):将关键数据打印在控制台:去掉?写在一个文件?2.框架来记录系统的一些运行时信息:日志框架 :riz ...

  8. SpringBoot的日志管理

    SpringBoot的日志管理 SpringBoot关于日志的官方文档 1.简述 SpringBoot官方文档关于日志的整体说明 本博客基于SpringBoot_1.3.6大家请先简单看下这篇英文的官 ...

  9. springboot+logback日志输出企业实践(下)

    目录 1.引言 2. 输出 logback 状态数据 3. logback 异步输出日志 3.1 异步输出配置 3.2 异步输出原理 4. springboot 多环境下 logback 配置 5. ...

随机推荐

  1. 【题解】「SP34013」SEUG - Seetha’s Unique Game

    这道题一看就是 贪心 . 使放的石头少,就需要石头大. 那么就可以将石头重量排序,从大到小. 这道题里面看似东西很多,但是很多东西都是没有用的.比如说:箱子的长和宽,因为题目中说「每加一个石头,水的高 ...

  2. demo集合

    demos的github地址:https://github.com/zy0628/demos 包含以下demo: 1.图片上传.编辑.合成一张图 需求:1.1.拍照或上传本地相册. 2.2.可以截取图 ...

  3. js获取url参数、图片转本地base64跨域问题

    获取url参数是经常需要用的一个方法,url上的参数可以让我们的程序执行更灵活. 图片转本地也是很实用的,因为海报合成通常只支持本地. 下面我们来看看这些功能的实现: 获取所有参数,采用split拆分 ...

  4. Shiro实现Basic认证

    前言 今天跟小伙伴们分享一个实战内容,使用Spring Boot+Shiro实现一个简单的Http认证. 场景是这样的,我们平时的工作中可能会对外提供一些接口,如果这些接口不做一些安全认证,什么人都可 ...

  5. 工作三年!全靠大佬的Java笔记,年底跳槽阿里涨了10K

    前言 不论是校招还是社招都避免不了各种⾯试.笔试,如何去准备这些东⻄就显得格外重要,之前8月底阿里的人事部门打电话叫我要不要面试,当时正处于换工作的期间,于是就把简历发给阿里hr,人事审核后经过一些列 ...

  6. 仵航说 SpringBoot项目配置Log日志服务-仵老大

    今天领导让我配置一个log日志服务,我哪里见过哟,然后就去百度了,结果挨个试下去,找到了一个能用的,分享给大家 大致四个地方 分别是 1.pom文件需要引入依赖 2.创建一个TestLog类 3.在y ...

  7. dropload.min.js 下拉刷新后,无法上拉加载更多

    使用方法 1.引入文件 <script src="/app/media/js/dropload.min.js"></script> 111111111111 ...

  8. JDK8新特性详解(一)

    虽然JDK8已经出来了N久,其新特性也在日益改变着我们的编码习惯和风格.虽然有些新特性用起来很顺手,但是总是傻傻分不清到底是哪个版本的.趁今天有时间,我们就来总结一下,JDK8有哪些能提升我们开发效率 ...

  9. 阿里云服务器Centos7上使用Nginx部署https协议的网站

    1,申请域名证书成功后,下载压缩包,一定要选择Nginx的证书类型,解压后得到一个key文件一个pem文件,将这两个文件上传到服务器的root目录 2,打开nginx配置文件 vim /etc/ngi ...

  10. MacOS下解决宿主机和docker容器之间网络互通

    docker在Mac下使用非常方便,官网提供了desktop版本的可视化软件,甚至还十分贴心地集成好了k8s套件.然而如果想同时部署和使用多个容器,每个容器不使用127.0.0.1地址,而是各自有ip ...