【Spring Boot学习笔记】——日志功能

Spring Boot默认日志系统

Spring Boot默认使用LogBack日志系统,如果不需要更改为其他日志系统如Log4j2等,则无需多余的配置,LogBack默认将日志打印到控制台上。
如果要使用LogBack,原则上是需要添加dependency依赖的

<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-loggingartifactId>pre>

但是因为新建的Spring Boot项目一般都会引用spring-boot-starter或者spring-boot-starter-web,而这两个起步依赖中都已经包含了对于spring-boot-starter-logging的依赖,所以,无需额外添加依赖。

pom文件使用基本的就可以:


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.1.8.RELEASEversion>
        <relativePath/> 
    parent>

    
    <groupId>vip.rensiyugroupId>
    <artifactId>springboot_loggingartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <name>springboot_loggingname>
    <description>Demo project for Spring Bootdescription>

    <properties>
        <java.version>1.8java.version>
    properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>

    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>

project>

编写一个hello.java配置文件:

package vip.rensiyu.springboot_logging;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * Mail: [email protected]
 * Date: 2019-09-24
 * Time: 12:27
 */

@Configuration
public class Hello {

    Logger logger = LoggerFactory.getLogger(getClass());

    @Bean
    public String logMethod() {
        logger.info("==========print log==========");
        return "hello world";
    }
}

接着运行就可以了
【Spring Boot学习笔记】——日志功能_第1张图片

以上至默认配置启动下的日志显示情况,如果需要做一些定制的日志配置比如将日志存储到文件等应该如何配置,下面就通过几个小问题来看看Spring Boot下是如何解决这些问题的。

springboot修改日志的默认配置

        //日志的级别;
        //由低到高   trace
        //可以调整输出的日志级别;日志就只会在这个级别以以后的高级别生效
        logger.trace("这是trace日志...");
        logger.debug("这是debug日志...");
        //SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别
        logger.info("这是info日志...");
        logger.warn("这是warn日志...");
        logger.error("这是error日志...");

默认打印的是后三个
在这里插入图片描述
修改默认输出日志的等级

logging.level.包名=trace
logging.level.vip.rensiyu.springboot_logging=trace

设置后就是从trace往下输出
在这里插入图片描述

设置生成日志的路径

#logging.path=
# 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用?spring.log 作为默认文件
#logging.path=/spring/log


# 不指定路径在当前项目下生成springboot.log日志
# 可以指定完整的路径;
#logging.file=G:/springboot.log
logging.file logging.path Example Description
(none) (none) 只在控制台输出
指定文件名 (none) my.log 输出日志到my.log文件
(none) 指定目录 /var/log 输出到指定目录的 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

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

指定配置文件

给类路径下放上每个日志框架自己的配置文件即可(默认是logback.xml文件 在文章的最后附上源码);SpringBoot就不使用他默认配置的了
比如在logback文件中修改
在这里插入图片描述
【Spring Boot学习笔记】——日志功能_第2张图片
springboot启动时就会自动加载,logbackxml文件

运行结果如下:
【Spring Boot学习笔记】——日志功能_第3张图片

使用哪种类型的日志,就放那种类型的文件,格式如下表:

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:直接就被日志框架识别了;

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

不明白就先看一个官方文档
【Spring Boot学习笔记】——日志功能_第4张图片
翻译如下
Spring Boot包含许多Logback扩展,可以帮助进行高级配置。您可以在logback-spring.xml配置文件中使用这些扩展名。
由于标准logback.xml配置文件加载得太早,因此无法在其中使用扩展名。您需要使用logback-spring.xml或定义logging.config属性。
这些扩展不能与Logback的配置扫描一起使用。如果尝试这样做,则对配置文件进行更改将导致类似于以下记录之一的错误

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]]

只有logback文件中可以配置profile

使用带扩展名的还有好处
通过标记,您可以根据活动的Spring概要文件有选择地包括或排除配置部分。在元素内的任何位置都支持概要文件部分。使用name属性指定哪个配置文件接受配置。标记可以包含简单的配置文件名称(例如,暂存)或配置文件表达式。配置文件表达式允许表达更复杂的配置文件逻辑,例如生产&(eu-central | eu-west)。有关更多详细信息,请参阅参考指南。以下清单显示了三个样本概要文件:

<springProfile name="staging">
    
  	可以指定某段配置只在某个环境下生效
springProfile>

<springProfile name="staging">
	
springProfile>

<springProfile name="dev | staging">
	
springProfile>

<springProfile name="!production">
	
springProfile>

在这里插入图片描述
如:

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        
        <layout class="ch.qos.logback.classic.PatternLayout">
            <springProfile name="dev">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%npattern>
            springProfile>
            <springProfile name="!dev">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%npattern>
            springProfile>
        layout>
    appender>

只有logback文件中可以配置profile
如果使用logback.xml作为日志配置文件,还要使用profile功能,会有以下错误

no applicable action for [springProfile]

参考文章https://www.cnblogs.com/bigdataZJ/p/springboot-log.html

logback源码和logback-spring一样



<configuration scan="false" scanPeriod="60 seconds" debug="false">
    
    <property name="LOG_HOME" value="/app/log" />
    
    <property name="appName" value="atguigu-springboot">property>
    
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
        layout>
    appender>

      
    <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <file>${LOG_HOME}/${appName}.logfile>
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.logfileNamePattern>
            
            <MaxHistory>365MaxHistory>
            
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
        rollingPolicy>
             
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%npattern>
        layout>
    appender>

    
    
    <logger name="com.atguigu" level="debug" />
    
    <logger name="org.springframework" level="debug" additivity="false">logger>



    
    <root level="info">
        <appender-ref ref="stdout" />
        <appender-ref ref="appLogAppender" />
    root>
configuration> 

你可能感兴趣的:(Spring,Boot)