springboot2原理實戰(19)--日誌配置

目錄:

本文主要來了解下springboot2的日誌配置
在這裏插入圖片描述

一、日誌級別

springboot默認使用的日誌是logback,日誌級別有很多,我們看下這個類LogLevel :

package org.springframework.boot.logging;

/**
 * Logging levels supported by a {@link LoggingSystem}.
 *
 * @author Phillip Webb
 * @since 1.0.0
 */
public enum LogLevel {

	TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF

}

可以看到 日誌級別有: trace debug info warn error fetal off。日誌級別從trace(跟蹤)到FATAL(致命)依次級別變高的。off是關閉日誌。

瞭解默認級別:

做個試驗,看下springboot默認使用的是哪種級別:
寫個類打印日誌:

@Component
public class UserService {

    private Logger log  = LoggerFactory.getLogger(this.getClass());

    public void log(){
        log.debug("user service debug log");
        log.info("user service info log");
        log.warn("user service warn log");
        log.error("user service error log");
    }

}

入口函數調用log方法:

@SpringBootApplication
public class Demo19Application {

    public static void main(String[] args) {
//        ConfigurableApplicationContext context = SpringApplication.run(Demo19Application.class, "--debug");
        ConfigurableApplicationContext context = SpringApplication.run(Demo19Application.class, args);
        context.getBean(UserDao.class).log();
        System.out.println("=====================================================================");
        context.close();
    }

}

運行結果如下:
在這裏插入圖片描述
可以看到默認的日誌級別是info開始的。
我們一般開發中經常是使用debug級別,生成環境中是從info開始,所以設置下日誌級別:

2.設置日誌級別爲debug

可以通過logging.level.*=DEBUG來設置,可以是包,也可以是某個類

①修改某個類的日誌級別

  • 修改application.properties
# root表示所有的類
#logging.level.com.springboot.demo19.dao=Debug

再次運行入口函數:

@SpringBootApplication
public class Demo19Application {

    public static void main(String[] args) {
//        ConfigurableApplicationContext context = SpringApplication.run(Demo19Application.class, "--debug");
        ConfigurableApplicationContext context = SpringApplication.run(Demo19Application.class, args);
        context.getBean(UserDao.class).log();
        System.out.println("=====================================================================");
//        context.getBean(UserService.class).log();
        context.close();
    }

}

如下圖:userDao的日誌級別已經修改成了debug級別:
在這裏插入圖片描述
剛纔配置文件是指向了類,還可以指向包,也可指向全部使用root。現在演示所有的類的日誌級別,都改成debug。

②修改所有的類的日誌級別:

修改成root不僅可以打印自己寫的類,也可以打印出springboot源碼中類的日誌。

  • 修改application.properties
# root表示所有的類
logging.level.root=Debug
@Component
public class UserService {

    private Logger log  = LoggerFactory.getLogger(this.getClass());

    public void log(){
        log.debug("user service debug log");
        log.info("user service info log");
        log.warn("user service warn log");
        log.error("user service error log");
    }

}
@Component
public class UserDao {

    private Logger log  = LoggerFactory.getLogger(this.getClass());

    public void log(){
        log.debug("user dao debug log");
        log.info("user dao info log");
        log.warn("user dao warn log");
        log.error("user dao error log");
    }


}
@SpringBootApplication
public class Demo19Application {

    public static void main(String[] args) {
//        ConfigurableApplicationContext context = SpringApplication.run(Demo19Application.class, "--debug");
        ConfigurableApplicationContext context = SpringApplication.run(Demo19Application.class, args);
        context.getBean(UserDao.class).log();
        System.out.println("=====================================================================");
        context.getBean(UserService.class).log();
        context.close();
    }

}

運行結果:
在這裏插入圖片描述
可以看到全部的類的日誌的debug級別的日誌開始都打印出來了。

這裏如果想要只打印springboot的自己debug的日誌,不打印我們的,可以
// ConfigurableApplicationContext context = SpringApplication.run(Demo19Application.class, "--debug");
打開這行代碼
並且去掉application.properties的那行root的配置

@SpringBootApplication
public class Demo19Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Demo19Application.class, "--debug");
        context.getBean(UserDao.class).log();
        System.out.println("=====================================================================");
        context.getBean(UserService.class).log();
        context.close();
    }

}

可看到,上面的是springboot的debug級別的日誌,下面使我們自己寫的info日誌級別的日誌。
在這裏插入圖片描述

2.排除源碼的日誌

如果想排除springboot源碼中某個類的debug的日誌,可以在註解上設置

@SpringBootApplication(exclude = WebServicesAutoConfiguration.class)
public class Demo19Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Demo19Application.class, "--debug");
//        ConfigurableApplicationContext context = SpringApplication.run(Demo19Application.class, args);
        context.getBean(UserDao.class).log();
        System.out.println("=====================================================================");
        context.getBean(UserService.class).log();
        context.close();
    }

}

這裏我們使用@SpringBootApplication(exclude = WebServicesAutoConfiguration.class),排除了這個類的日誌,本質上是不自動配置這個類了,頭腦要靈活,不能被限制在日誌的圈子裏。

3.關閉日誌輸出

關閉其實很簡單,可以關閉某個類或者某個包下的日誌:
application.properties

logging.level.com.springboot.demo19.dao=OFF
logging.level.com.springboot.demo19.service=DEBUG

看下還有沒有userdao的日誌:

@SpringBootApplication(exclude = WebServicesAutoConfiguration.class)
public class Demo19Application {

    public static void main(String[] args) {
//        ConfigurableApplicationContext context = SpringApplication.run(Demo19Application.class, "--debug");
        ConfigurableApplicationContext context = SpringApplication.run(Demo19Application.class, args);
        context.getBean(UserDao.class).log();
        System.out.println("=====================================================================");
        context.getBean(UserService.class).log();
        context.close();
    }

}

在這裏插入圖片描述
userdao的所有的日誌都不打印了。

二、日誌文件輸出

配置屬性在這個類org.springframework.boot.context.logging.LoggingApplicationListener
在這裏插入圖片描述
這個類中有LogFile這個類:
在這裏插入圖片描述
配置屬性都在這個類裏:
在這裏插入圖片描述
application.properties可以設置文件路徑地址和 控制檯輸出的格式,日誌文件格式

logging.file.path=e:/tmp/my.log 指定文件路徑地址
日誌文件輸出,文件的大小10M之後,就會分割了。

指定文件輸出格式:
logging.pattern.console //配置控制檯輸出日誌的pattern
logging.pattern.file //配置日誌文件輸出日誌的pattern

更多配置信息:看下這個博客https://www.jianshu.com/p/1fa12b92d5c4

三.springboot 也支持log4j或者log4j2

1.使用logback.xml設置日誌

springboot默認支持logback
也就是說,只需要在classpath下放一個logback.xml.logback-spring.xml的文件,即可定製日誌的輸出
logback.xml 例子如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定義日誌文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
    <property name="LOG_HOME" value="E:\\logs\\projectname" />

    <!-- 控制檯輸出 -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 1格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!--臨界值日誌過濾級別配置 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- 1在日誌級別的基礎上過濾掉trace級別以下的日誌 -->
            <level>trace</level>
        </filter>
    </appender>

    <!-- trace級別,按照每天生成日誌文件 -->
    <appender name="trace" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日誌文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}\trace-log-%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日誌文件保留天數-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!--日誌文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
        <!--只保留固定配置級別的日誌 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>trace</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- debug級別,按照每天生成日誌文件 -->
    <appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日誌文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}\debug-log-%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日誌文件保留天數-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!--日誌文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
        <!--只保留固定配置級別的日誌 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- info級別,按照每天生成日誌文件 -->
    <appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日誌文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}\info-log-%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日誌文件保留天數-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!--日誌文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
        <!--只保留固定配置級別的日誌 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- warn級別,按照每天生成日誌文件 -->
    <appender name="warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日誌文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}\warn-log-%d{yyyy-MM-dd}.log</FileNamePattern>
            <!-- <file>D:\logs\logback.%d{yyyy-MM-dd}.log</file> -->
            <!--日誌文件保留天數-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!--日誌文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
        <!--只保留固定配置級別的日誌 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- error級別,按照每天生成日誌文件 -->
    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日誌文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}\error-log-%d{yyyy-MM-dd}.log</FileNamePattern>

            <!--日誌文件保留天數-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!--日誌文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
        <!--只保留固定配置級別的日誌 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <!-- 日誌級別排序爲: TRACE < DEBUG < INFO < WARN < ERROR -->
    <!-- 日誌輸出級別 -->
    <root level="trace">
        <appender-ref ref="stdout" />
        <appender-ref ref="trace" />
        <appender-ref ref="debug" />
        <appender-ref ref="info" />
        <appender-ref ref="warn" />
        <appender-ref ref="error" />
    </root>
</configuration>

2. 使用其他的日誌組件的步驟

1:排除掉默認的日誌組件: spring-boot-starter-logging
2: 加入新的日誌路徑依賴
3;吧響應的配置文件放到classpath下 名字可以是 logback.xml 或者logback-spring.xml

第1 、 2步

<dependencies>
       <!--   默認添加了日誌依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        <!--排除logback的依賴-->
             <exclusions>
                 <exclusion>
                     <groupId>org.springframework.boot</groupId>
                     <artifactId>spring-boot-starter-logging</artifactId>
                 </exclusion>
             </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
            <version>1.4.0.RELEASE</version>
        </dependency>

第3步在classpath下放一個log4j2-spring.xml活log4j.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

設置成debug模式

四、源碼中的默認日誌模板

在\org\springframework\boot\spring-boot\2.2.5.RELEASE\spring-boot-2.2.5.RELEASE.jar
在這裏插入圖片描述
可以看到log4j2和logback的默認的xml模板和一些配置
比如從這裏可以看到logback默認是使用的info日誌級別。
在這裏插入圖片描述
file-appender.xml 設置的是默認的文件格式信息:
在這裏插入圖片描述


本文主要了解了springboot的日誌設置,比如日誌級別,修改默認日誌級別,內置的日誌有log4j2和logback,如何切換日誌,用xml配置日誌等。


個人微信公號:
搜索: 怒放de每一天
不定時推送相關文章,期待和大家一起成長!!
在這裏插入圖片描述


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章