• Spring Boot日志使用


    前言: 这是我第一次仔细研究Spring Boot相关的知识,就拿日志下手了,欢迎大家指点

    Spring Boot日志关系

    这个是Spring Boot的启动器,我们点击spring-boot-starter

    <dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter</artifactId>
    	</dependency>
    

    这个spring-boot-starter-logging就是Spring Boot用来做日志功能的

    <dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-logging</artifactId>
    	</dependency>
    

    底层依赖关系

    通过这张图我们能总结出

    1. Spring Boot底层也是使用slf4j+logback的方式进行日志记录

    2. Spring Boot也把其他的日志都替换成了slf4j;

    那么Spring Boot是如何将这些日志都替换成slf4j的呢?我们找到其中的一个jcl-over-slf4j

    我们可以看到里面有个commons.logging,里面实现的正是SLF4JLogFactory

    @SuppressWarnings("rawtypes")
    public abstract class LogFactory {
    
        static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J = "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j";
    
        static LogFactory logFactory = new SLF4JLogFactory();
    

    那么我们如果要引入其它框架,一定要把这个框架的默认日志依赖移除掉。

    Spring Boot用的是commons-logging

    	<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-core</artifactId>
    			<exclusions>
    				<exclusion>
    					<groupId>commons-logging</groupId>
    					<artifactId>commons-logging</artifactId>
    				</exclusion>
    			</exclusions>
    		</dependency>
    

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

    日志使用

    默认配置

    Spring Boot默认帮我们配置好了日志;日志有五种级别,由低到高是trace<debug<info<warn<error,可以调整输出的日志级别;日志就只会在这个级别及以后的高级别生效,Spring Boot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别

    为什么也叫root级别呢,依次点击文件目录下的这些文件

    graph LR A[External Libraries]-->B[springframework.boot.spring-boot] B-->C[org] C-->D[springframework] D-->E[boot] E-->F[logging] F-->G[logback] G-->H[base.xml]

    从图中我们能看出,Spring Boot有个默认标签<root>里面指定的级别正是INFO,这也就是为什么默认级别叫root级别,作为一个小知识点给大家扩展了一下,下面进入正题,我们在测试类中写下以下代码。

    //记录器
    Logger logger = LoggerFactory.getLogger(getClass());
    @Test
    public void contextLoads() {
    	logger.trace("这是trace日志...");
    	logger.debug("这是debug日志...");
    	//SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别
    	logger.info("这是info日志...");
    	logger.warn("这是warn日志...");
    	logger.error("这是error日志...");
    	}
    

    现在我们启动这个测试类

    可以看出只打印出了info及以后的日志记录,也印证了前面所说的

    修改默认配置

    接下来我们来修改Spring Boot的默认配置

    1. 修改默认级别
    2. 输出日志文件
    3. 修改打印格式

    以下代码均在application.properties文件中写入

    修改默认级别

    logging.level.com.atguigu=trace
    

    这行代码指定了Spring Boot会输出trace及以后级别的日志记录,level以后的路径是当前项目的路径

    输出日志文件

    输出日志有两种方法

    1. logging.file
    2. logging.path

    logging.file

    输出指定文件名的日志,通过这个我们可以指定输出的日志文件名的名称

    logging.file=f:/springlog/springboot.log
    

    我们会在这个路径下生成一个叫springboot.log的日志,如果没有指定路径,会在当前项目下生成springboot.log日志

    logging.path

    在f盘下创建springlogpath文件夹和里面的log文件;使用 spring.log 作为默认文件

    logging.path=f:/springlogpath
    
    logging.file logging.path Example Description
    (none) (none) 只在控制台输出
    指定文件名 (none) my.log 输出日志到my.log文件
    (none) 指定目录 /var/log 输出到指定目录的 spring.log 文件中

    如果都不指定,默认只在控制台输出,如果同时指定,只有logging.file生效

    修改打印格式

    我们可以自定义日志输入的格式同样有两种方法

    1. logging.pattern.console
    2. logging.pattern.file

    logging.pattern.console

    修改控制台输出日志格式

    logging.pattern.console=%d{yyyy-MM-dd} ----> [%thread] ----> %-5level---> %logger{50} ---> %msg%n
    

    我们用---->的方式来作为控制台打印日志的连接

    如我们所预期的一样,每个log中都是用的---->来连接的

    logging.pattern.file

    修改指定文件中输出日志的格式

    logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n
    

    日志文件里我们用===来作为连接看效果

        日志输出格式:
    		%d表示日期时间,
    		%thread表示线程名,
    		%-5level:级别从左显示5个字符宽度
    		%logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
    		%msg:日志消息,
    		%n是换行符
        -->
        %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
    

    这个就是日志输出的格式,大家可以照着这个来自定义自己的日志

    指定配置

    我们可以给类路径下放上每个日志框架自己的配置文件;SpringBoot就不使用他默认配置的了

    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

    这是每个日志对应的配置文件名称

    如果我们放的是logback.xml,他能直接就被日志框架识别,

    而Spring Boot官网建议我们用的是logback-spring.xml来扩展高级功能

    如果我们放的是logback-spring.xml日志框架就不能识别配置文件从而直接加载日志的配置项,由Spring Boot解析日志配置,我们可以使用Spring Boot的高级Profile功能

    <springProfile name="dev">
        <!-- configuration to be enabled when the "staging" profile is active -->
      	可以指定某段配置只在某个环境下生效
    </springProfile>
    
    

    在配置文件中加上这个标签就可以某段配置只在指定环境下生效,比如这段代码就会在dev环境下才生效

    切换日志框架

    我们可以在Spring Boot官网找到这张图片

    如果我们想使用log4j,那么我们需要导入log4j一系列的所有包。slf4j-apislf4j-log4j12log4j

    Spring Boot日志使用到这就到达尾声了,如果有说的不对的地方还望指出,一起进步。

  • 相关阅读:
    剑桥雅思写作高分范文ESSAY81
    maven安装配置
    IntelliJ IDEA 2017.3.1安装步骤
    Git基本命令整理
    jacoco覆盖率工具测试及性能分析
    OSGI框架
    查看指定库对应GCC版本
    普元eos、soa、esb
    emp架构
    jar包安装到本地仓库
  • 原文地址:https://www.cnblogs.com/zouwangblog/p/11198915.html
Copyright © 2020-2023  润新知