Spring Boot日志

更多信息:

本篇算是学习笔记

视频
尚硅谷
配置文件的信息

编辑器:IntelliJ IDEA 2020.1



日志框架

作用:框架来记录系统的一些运行时信息。

种类

JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j

日志的抽象层日志实现
JCL(Jakarta Commons Logging) SLF4j(Simple Logging Facade for Java) jboss-loggingLog4j JUL(java.util.logging) Log4j2 Logback

左边选一个门面(抽象层)、右边来选一个实现;

Spring框架选用是用JCL;
SpringBoot选用 SLF4j和logback;


SLF4j的使用

更多信息

方法:日志记录方法的调用,不应该来直接调用日志的实现类,而是应该调用日志抽象层里面的方法。而抽象层会调用实现层来实现。

导入SLF4j和logback日志的代码

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");
  }
}

在这里插入图片描述

1
The SLF4J interfaces and their various adapters are extremely simple. Most developers familiar with the Java language should be able to read and fully understand the code in less than one hour. No knowledge of class loaders is necessary as SLF4J does not make use nor does it directly access any class loaders. As a consequence, SLF4J suffers from none of the class loader problems or memory leaks observed with Jakarta Commons Logging (JCL).
2
Given the simplicity of the SLF4J interfaces and its deployment model, developers of new logging frameworks should find it very easy to write SLF4J bindings.

每一个日志的实现框架都有自己的配置文件(互不相同)。使用slf4j以后,配置文件还是做成日志实现框架自己的配置文件;

其他日志框架转换为SLF4J

更多信息

目的:为了解决一个项目中日志框架不统一导致的问题。

在这里插入图片描述

解决方法

1、将系统中其他日志框架先排除出去;
在这里插入图片描述

2、用对应的jar包来替换原有的其他的日志框架;
在这里插入图片描述

3、我们导入slf4j其他的实现框架
在这里插入图片描述


Spring Boot 日志关系

pom.xml 文件分析

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • ​SpringBoot底层也是使用slf4j+logback的方式进行日志记录
  • SpringBoot也把其他的日志都替换成了slf4j;
  • 中间替换包log4j-to-slf4j、jul-to-slf4j

注意:如果我们要使用别的框架(不使用slf4j+logback的框架,使用log4j框架),必须将这些转换包移除,不然包名和类名一致会冲突。

Spring Boot就移除掉 Spring框架使用的commons-logging;

总结

SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架(log4j之类的日志框架)的时候,只需要把这个框架依赖的日志框架排除掉即可;

Spring Boot日志的默认配置

默认配置

application.properties中日志的权限默认是info
在这里插入图片描述

logging.level.com.atgugui=trace
logging.file.name=springboot.log
#指定控制台的编码
logging.charset.console=utf-8;
#日志输出格式:
#%d表示日期时间,
#%thread表示线程名,
#%-5level:级别从左显示5个字符宽度
#%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
#%msg:日志消息,
#%n是换行符

#指定控制台中输出的格式
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




logging.filelogging.pathExampleDescription
(none)(none)只在控制台输出
指定文件名(none)my.log输出日志到my.log文件
(none)指定目录/var/log输出到指定目录的 spring.log 文件中

logging file的优先级比logging path高

SpringBoot03LoggingApplicationTests

package com.atgugui.springboot03logging;

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 SpringBoot03LoggingApplicationTests {

    //记录器
    Logger logger = LoggerFactory.getLogger(getClass());

    @Test
    public void contextLoads() {
        //System.out.println();


        /**
         * 日志的级别;
         * 由低到高  trace<debug<info<warn<error
         * 日志只会输出你的级别 及 以上的信息。如果你是info,日志输出info、warn、error的信息
         */


        //轨迹信息
        logger.trace("这是trace日志...");
        //调试信息
        logger.debug("这是debug日志...");
        /*SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别
        可以在application.properties文件中调整级别*/
        logger.info("这是info日志...");
        //警告信息
        logger.warn("这是warn日志...");
        //错误信息
        logger.error("这是error日志...");


    }

}

默认配置的原理

org\springframework\boot\spring-boot\2.4.0
spring-boot-2.4.0.jar!\org\springframework\boot\logging\logback\base.xml
在这里插入图片描述

org\springframework\boot\spring-boot\2.4.0
spring-boot-2.4.0.jar!\org\springframework\boot\logging\logback\default.xml
在这里插入图片描述
LogbackLoggingSystemProperties
在这里插入图片描述
赋值之后,defaults.xml就可以从类似于CONSOLE_LOG_PATTERN获得相应的值。

写日志的配置文件

给类路径下放上每个日志框架自己的配置文件即可;SpringBoot就不使用他默认配置的了
在这里插入图片描述

Logging SystemCustomization
Logbacklogback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy
Log4j2log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging)logging.properties

logback.xml:直接就被日志框架识别了;

logback-spring.xml:日志框架就不直接加载日志的配置项,由SpringBoot解析日志配置,可以使用SpringBoot的高级Profile功能

<layout class="ch.qos.logback.classic.PatternLayout">
            <!--开发环境下使用-->
            <springProfile name="dev">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n</pattern>
            </springProfile>
            <!--非开发环境下使用-->
            <springProfile name="!dev">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n</pattern>
            </springProfile>
        </layout>

环境的激活可以在application.properties中配置(根据你的情况选择激活的环境)

spring.profiles.active=dev

也可以在命令行上配置在Program arguments框中输入(根据你的情况选择激活的环境)
–spring.profiles.active=dev

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值