欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot 日志的配置及輸出應(yīng)用教程

 更新時(shí)間:2021年12月02日 14:26:50   投稿:newname  
Spring Boot 默認(rèn)使用 SLF4J+Logback 記錄日志,并提供了默認(rèn)配置。本文我們將重點(diǎn)介紹Spring Boot日志的配置及輸出。感興趣的小伙伴可以了解一下

默認(rèn)配置

Spring Boot 默認(rèn)使用 SLF4J+Logback 記錄日志,并提供了默認(rèn)配置,即使我們不進(jìn)行任何額外配,也可以使用 SLF4J+Logback 進(jìn)行日志輸出。

常見的日志配置包括日志級別、日志的輸入出格式等內(nèi)容。

日志級別

日志的輸出都是分級別的,當(dāng)一條日志信息的級別大于或等于配置文件的級別時(shí),就對這條日志進(jìn)行記錄。

常見的日志級別如下(優(yōu)先級依次升高)。

序號 日志級別 說明
1 trace 追蹤,指明程序運(yùn)行軌跡。
2 debug 調(diào)試,實(shí)際應(yīng)用中一般將其作為最低級別,而 trace 則很少使用。
3 info 輸出重要的信息,使用較多。
4 warn 警告,使用較多。
5 error 錯(cuò)誤信息,使用較多。

輸出格式

我們可以通過以下常用日志參數(shù)對日志的輸出格式進(jìn)行修改,如下表。

序號 輸出格式 說明
1 %d{yyyy-MM-dd HH:mm:ss, SSS}? 日志生產(chǎn)時(shí)間,輸出到毫秒的時(shí)間
2 %-5level? 輸出日志級別,-5 表示左對齊并且固定輸出 5 個(gè)字符,如果不足在右邊補(bǔ) 0
3 %logger 或?%c? logger 的名稱
4 ?%thread??或 %t 輸出當(dāng)前線程名稱
5 %p 日志輸出格式
6 %message?或 %msg?或?%m 日志內(nèi)容,即 logger.info("message")
7 %n 換行符
8 %class 或 %C 輸出 Java 類名
9 ?%file 或 %F 輸出文件名
10 %L 輸出錯(cuò)誤行號
11 %method?或?%M 輸出方法名
12 %l? 輸出語句所在的行數(shù), 包括類名、方法名、文件名、行數(shù)
13 hostName 本地機(jī)器名
14 hostAddress 本地 ip 地址

示例 1

下面我們通過一個(gè)實(shí)例,來查看 Spring Boot 提供了哪些默認(rèn)日志配置。

1. 在 Spring Boot 中編寫 Java 測試類,代碼如下。

package net.biancheng.www;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringbootLoggingApplicationTests {
    Logger logger = LoggerFactory.getLogger(getClass());
    /**
     * 測試日志輸出
     * SLF4J 日志級別從小到大trace>debug>info>warn>error
     */
    @Test
    void logTest() {
        //日志級別 由低到高
        logger.trace("trace 級別日志");
        logger.debug("debug 級別日志");
        logger.info("info 級別日志");
        logger.warn("warn 級別日志");
        logger.error("error 級別日志");
    }
}

2. 執(zhí)行該測試,控制臺輸出如下圖。

圖1:Spring Boot 日志級別

通過控制臺輸出結(jié)果可知,Spring Boot 日志默認(rèn)級別為 info,日志輸出內(nèi)容默認(rèn)包含以下元素:

  • 時(shí)間日期
  • 日志級別
  • 進(jìn)程 ID
  • 分隔符:---
  • 線程名:方括號括起來(可能會(huì)截?cái)嗫刂婆_輸出)
  • Logger 名稱
  • 日志內(nèi)容

修改默認(rèn)日志配置

我們可以根據(jù)自身的需求,通過全局配置文件(application.properties/yml)修改 Spring Boot 日志級別和顯示格式等默認(rèn)配置。

?在 application.properties 中,修改 Spring Boot 日志的默認(rèn)配置,代碼如下。

#日志級別
logging.level.net.biancheng.www=trace
#使用相對路徑的方式設(shè)置日志輸出的位置(項(xiàng)目根目錄目錄\my-log\mylog\spring.log)
#logging.file.path=my-log/myLog
#絕對路徑方式將日志文件輸出到 【項(xiàng)目所在磁盤根目錄\springboot\logging\my\spring.log】
logging.file.path=/spring-boot/logging
#控制臺日志輸出格式
logging.pattern.console=%d{yyyy-MM-dd hh:mm:ss} [%thread] %-5level %logger{50} - %msg%n
#日志文件輸出格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} === - %msg%n

執(zhí)行測試代碼,執(zhí)行結(jié)果如下。

圖2:Spring Boot 日志修改默認(rèn)配置

從圖 2 可以看到,控制臺中日志的輸出格式與 application.properties 中的 logging.pattern.console 配置一致。

查看本地日志文件 spring.log,該文件日志輸出內(nèi)容如下圖。

圖3:本地日志文件 spring.log

從圖 3 可以看到,本地日志文件中的日志輸出格式與 application.properties 中 logging.pattern.file 配置一致。

自定義日志配置

在 Spring Boot 的配置文件 application.porperties/yml 中,可以對日志的一些默認(rèn)配置進(jìn)行修改,但這種方式只能修改個(gè)別的日志配置,想要修改更多的配置或者使用更高級的功能,則需要通過日志實(shí)現(xiàn)框架自己的配置文件進(jìn)行配置。

Spring 官方提供了各個(gè)日志實(shí)現(xiàn)框架所需的配置文件,用戶只要將指定的配置文件放置到項(xiàng)目的類路徑下即可。

日志框架 配置文件
Logback logback-spring.xml、logback-spring.groovy、logback.xml、logback.groovy
Log4j2 log4j2-spring.xml、log4j2.xml
JUL (Java Util Logging) logging.properties

從上表可以看出,日志框架的配置文件基本上被分為 2 類:

  • 普通日志配置文件,即不帶 srping 標(biāo)識的配置文件,例如 logback.xml;
  • 帶有 spring 表示的日志配置文件,例如 logback-spring.xml。

這兩種日志配置文件在使用時(shí)大不相同,下面我們就對它們分別進(jìn)行介紹。

普通日志配置文件

我們將 logback.xml、log4j2.xml 等不帶 spring 標(biāo)識的普通日志配置文件,放在項(xiàng)目的類路徑下后,這些配置文件會(huì)跳過 Spring Boot,直接被日志框架加載。通過這些配置文件,我們就可以達(dá)到自定義日志配置的目的。

示例

1. 將 logback.xml 加入到 Spring Boot 項(xiàng)目的類路徑下(resources 目錄下),該配置文件配置內(nèi)容如下。

<?xml version="1.0" encoding="UTF-8"?>
<!--
scan:當(dāng)此屬性設(shè)置為true時(shí),配置文件如果發(fā)生改變,將會(huì)被重新加載,默認(rèn)值為true。
scanPeriod:設(shè)置監(jiān)測配置文件是否有修改的時(shí)間間隔,如果沒有給出時(shí)間單位,默認(rèn)單位是毫秒當(dāng)scan為true時(shí),此屬性生效。默認(rèn)的時(shí)間間隔為1分鐘。
debug:當(dāng)此屬性設(shè)置為true時(shí),將打印出logback內(nèi)部日志信息,實(shí)時(shí)查看logback運(yùn)行狀態(tài)。默認(rèn)值為false。
-->
<configuration scan="false" scanPeriod="60 seconds" debug="false">
    <!-- 定義日志的根目錄 -->
    <property name="LOG_HOME" value="/app/log"/>
    <!-- 定義日志文件名稱 -->
    <property name="appName" value="bianchengbang-spring-boot-logging"></property>
    <!-- ch.qos.logback.core.ConsoleAppender 表示控制臺輸出 -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--
        日志輸出格式:
   %d表示日期時(shí)間,
   %thread表示線程名,
   %-5level:級別從左顯示5個(gè)字符寬度
   %logger{50} 表示logger名字最長50個(gè)字符,否則按照句點(diǎn)分割。
   %msg:日志消息,
   %n是換行符
        -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread]**************** %-5level %logger{50} - %msg%n</pattern>
        </layout>
    </appender>
    <!-- 滾動(dòng)記錄文件,先將日志記錄到指定文件,當(dāng)符合某個(gè)條件時(shí),將日志記錄到其他文件 -->
    <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 指定日志文件的名稱 -->
        <file>${LOG_HOME}/${appName}.log</file>
        <!--
        當(dāng)發(fā)生滾動(dòng)時(shí),決定 RollingFileAppender 的行為,涉及文件移動(dòng)和重命名
        TimeBasedRollingPolicy: 最常用的滾動(dòng)策略,它根據(jù)時(shí)間來制定滾動(dòng)策略,既負(fù)責(zé)滾動(dòng)也負(fù)責(zé)出發(fā)滾動(dòng)。
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--
            滾動(dòng)時(shí)產(chǎn)生的文件的存放位置及文件名稱 %d{yyyy-MM-dd}:按天進(jìn)行日志滾動(dòng)
            %i:當(dāng)文件大小超過maxFileSize時(shí),按照i進(jìn)行文件滾動(dòng)
            -->
            <fileNamePattern>${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <!--
            可選節(jié)點(diǎn),控制保留的歸檔文件的最大數(shù)量,超出數(shù)量就刪除舊文件。假設(shè)設(shè)置每天滾動(dòng),
            且maxHistory是365,則只保存最近365天的文件,刪除之前的舊文件。注意,刪除舊文件是,
            那些為了歸檔而創(chuàng)建的目錄也會(huì)被刪除。
            -->
            <MaxHistory>365</MaxHistory>
            <!--
            當(dāng)日志文件超過maxFileSize指定的大小是,根據(jù)上面提到的%i進(jìn)行日志文件滾動(dòng) 注意此處配置SizeBasedTriggeringPolicy是無法實(shí)現(xiàn)按文件大小進(jìn)行滾動(dòng)的,必須配置timeBasedFileNamingAndTriggeringPolicy
            -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 日志輸出格式: -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [ %thread ] ------------------ [ %-5level ] [ %logger{50} : %line ] -
                %msg%n
            </pattern>
        </layout>
    </appender>
    <!--
  logger主要用于存放日志對象,也可以定義日志類型、級別
  name:表示匹配的logger類型前綴,也就是包的前半部分
  level:要記錄的日志級別,包括 TRACE < DEBUG < INFO < WARN < ERROR
  additivity:作用在于children-logger是否使用 rootLogger配置的appender進(jìn)行輸出,
  false:表示只用當(dāng)前l(fā)ogger的appender-ref,true:
  表示當(dāng)前l(fā)ogger的appender-ref和rootLogger的appender-ref都有效
    -->
    <!-- hibernate logger -->
    <logger name="net.biancheng.www" level="debug"/>
    <!-- Spring framework logger -->
    <logger name="org.springframework" level="debug" additivity="false"></logger>
    <!--
    root與logger是父子關(guān)系,沒有特別定義則默認(rèn)為root,任何一個(gè)類只會(huì)和一個(gè)logger對應(yīng),
    要么是定義的logger,要么是root,判斷的關(guān)鍵在于找到這個(gè)logger,然后判斷這個(gè)logger的appender和level。
    -->
    <root level="info">
        <appender-ref ref="stdout"/>
        <appender-ref ref="appLogAppender"/>
    </root>
</configuration>

2. 啟動(dòng)該項(xiàng)目并啟動(dòng)測試程序,結(jié)果如下。

. ____ _ __ _ _

/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \

( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

\\/ ___)| |_)| | | | | || (_| | ) ) ) )

' |____| .__|_| |_|_| |_\__, | / / / /

=========|_|==============|___/=/_/_/_/

:: Spring Boot :: (v2.5.0)

2021-05-24 14:51:11 [main]**************** INFO n.biancheng.www.SpringBootLoggingApplicationTests - Starting SpringBootLoggingApplicationTests using Java 1.8.0_131 on LAPTOP-C67MRMAG with PID 20080 (started by 79330 in D:\eclipse workSpace4\spring-boot-logging)

2021-05-24 14:51:11 [main]**************** DEBUG n.biancheng.www.SpringBootLoggingApplicationTests - Running with Spring Boot v2.5.0, Spring v5.3.7

2021-05-24 14:51:11 [main]**************** INFO n.biancheng.www.SpringBootLoggingApplicationTests - The following profiles are active: dev

2021-05-24 14:51:13 [main]**************** INFO n.biancheng.www.SpringBootLoggingApplicationTests - Started SpringBootLoggingApplicationTests in 2.058 seconds (JVM running for 3.217)

2021-05-24 14:51:13 [main]**************** DEBUG n.biancheng.www.SpringBootLoggingApplicationTests - debug 級別日志

2021-05-24 14:51:13 [main]**************** INFO n.biancheng.www.SpringBootLoggingApplicationTests - info 級別日志

2021-05-24 14:51:13 [main]**************** WARN n.biancheng.www.SpringBootLoggingApplicationTests - warn 級別日志

2021-05-24 14:51:13 [main]**************** ERROR n.biancheng.www.SpringBootLoggingApplicationTests - error 級別日志

帶有 spring 標(biāo)識的日志配置文件

Spring Boot 推薦用戶使用 logback-spring.xml、log4j2-spring.xml 等這種帶有 spring 標(biāo)識的配置文件。這種配置文件被放在項(xiàng)目類路徑后,不會(huì)直接被日志框架加載,而是由 Spring Boot 對它們進(jìn)行解析,這樣就可以使用 Spring Boot 的高級功能 Profile,實(shí)現(xiàn)在不同的環(huán)境中使用不同的日志配置。

示例

1. 將 logback.xml 文件名修改為 logback-spring.xml,并將配置文件中日志輸出格式的配置修改為使用 Profile 功能的配置。

2. 配置內(nèi)容修改前,日志輸出格式配置如下。?

<configuration scan="false" scanPeriod="60 seconds" debug="false">
    ......
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread]**************** %-5level %logger{50} - %msg%n</pattern>
        </layout>
    </appender>
    ......
</configuration> 

3. 修改 logback-spring.xml 的配置內(nèi)容,通過 Profile 功能實(shí)現(xiàn)在不同的環(huán)境中使用不同的日志輸出格式,配置如下。

<configuration scan="false" scanPeriod="60 seconds" debug="false">
    ......
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
       <layout class="ch.qos.logback.classic.PatternLayout">
            <!--開發(fā)環(huán)境 日志輸出格式-->
            <springProfile name="dev">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n</pattern>
            </springProfile>
            <!--非開發(fā)環(huán)境 日志輸出格式-->
            <springProfile name="!dev">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n</pattern>
            </springProfile>
        </layout>
    </appender>
    ......
</configuration> 

4. 在 Spring Boot 項(xiàng)目的 application.yml 中,激活開發(fā)環(huán)境(dev)的 Profile,配置內(nèi)容如下。

#默認(rèn)配置
server:
  port: 8080
#切換配置
spring:
  profiles:
    active: dev
---
#開發(fā)環(huán)境
server:
  port: 8081
spring:
  config:
    activate:
      on-profile: dev
---
#測試環(huán)境
server:
  port: 8082
spring:
  config:
    activate:
      on-profile: test
---
#生產(chǎn)環(huán)境
server:
  port: 8083
spring:
  config:
    activate:
      on-profile: prod

5. 啟動(dòng) Spring Boot 并執(zhí)行測試代碼,控制臺輸出如下。

圖4:dev 環(huán)境日志輸出結(jié)果

?6. 修改 appplication.yml 中的配置,激活測試環(huán)境(test)的 Profile,配置如下。

#默認(rèn)配置
server:
  port: 8080
#切換配置
spring:
  profiles:
    active: test
---
#開發(fā)環(huán)境
server:
  port: 8081
spring:
  config:
    activate:
      on-profile: dev
---
#測試環(huán)境
server:
  port: 8082
spring:
  config:
    activate:
      on-profile: test
---
#生產(chǎn)環(huán)境
server:
  port: 8083
spring:
  config:
    activate:
      on-profile: prod

7. 重啟 Spring Boot 并執(zhí)行測試代碼,控制臺輸出如下。

圖5:test 環(huán)境日志輸出結(jié)果?

到此這篇關(guān)于SpringBoot 日志的配置及輸出應(yīng)用教程的文章就介紹到這了,更多相關(guān)SpringBoot 日志配置及輸出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis Mapper中 @Select注解調(diào)用靜態(tài)常量的問題分析

    MyBatis Mapper中 @Select注解調(diào)用靜態(tài)常量的問題分析

    在Java編碼中,我們通常會(huì)把這些數(shù)字或者字符串定義在常量類或者接口中,可以直接在mapper中也可以使用這些常量就比較好,這篇文章主要介紹了MyBatis Mapper中 @Select注解調(diào)用靜態(tài)常量,需要的朋友可以參考下
    2023-06-06
  • SpringBoot是如何實(shí)現(xiàn)自動(dòng)配置的你知道嗎

    SpringBoot是如何實(shí)現(xiàn)自動(dòng)配置的你知道嗎

    這篇文章主要介紹了詳解SpringBoot自動(dòng)配置原理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-08-08
  • Javaweb動(dòng)態(tài)開發(fā)最重要的Servlet詳解

    Javaweb動(dòng)態(tài)開發(fā)最重要的Servlet詳解

    動(dòng)態(tài)web的核心是Servlet,由tomcat解析并執(zhí)行,本質(zhì)是Java中的一個(gè)類(面向?qū)ο螅┻@個(gè)類的功能十分強(qiáng)大幾乎可以完成全部功能,在Java規(guī)范中只有Servlet實(shí)現(xiàn)類實(shí)例化的對象才能被瀏覽器訪問,所以掌握Servlet具有重要意義
    2022-08-08
  • Scala中Array和List的區(qū)別說明

    Scala中Array和List的區(qū)別說明

    這篇文章主要介紹了Scala中Array和List的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java WebService技術(shù)詳解

    Java WebService技術(shù)詳解

    本文詳細(xì)講解了Java WebService技術(shù)工作原理以及調(diào)用方式。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • SpringBoot項(xiàng)目中定時(shí)器的實(shí)現(xiàn)示例

    SpringBoot項(xiàng)目中定時(shí)器的實(shí)現(xiàn)示例

    在Spring?Boot項(xiàng)目中,你可以使用Spring框架提供的@Scheduled注解來編寫定時(shí)任務(wù),本文就來介紹一下SpringBoot項(xiàng)目中定時(shí)器的實(shí)現(xiàn),感興趣的可以了解一下
    2023-11-11
  • Java提取2個(gè)集合中的相同和不同元素代碼示例

    Java提取2個(gè)集合中的相同和不同元素代碼示例

    這篇文章主要介紹了Java提取2個(gè)集合中的相同和不同元素代碼示例,涉及對removeall方法的簡單介紹,然后分享了主要的示例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-11-11
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(30)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(30)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • Java技巧:快速獲取圖片拍攝時(shí)間

    Java技巧:快速獲取圖片拍攝時(shí)間

    想知道如何用Java讀取圖片的拍攝時(shí)間嗎?在這篇指南中,我將向你展示如何利用Java編程語言輕松獲取圖像的拍攝時(shí)間信息,不要錯(cuò)過這個(gè)簡單而有用的技巧!
    2023-12-12
  • Java使用Collections.sort對中文進(jìn)行排序方式

    Java使用Collections.sort對中文進(jìn)行排序方式

    這篇文章主要介紹了Java使用Collections.sort對中文進(jìn)行排序方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論