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

如何為?Spring?Boot?項目配置?Logback?日志

 更新時間:2024年07月04日 14:53:21   投稿:mrr  
由于?Spring?Boot?的默認日志框架選用的?Logback,再加上?Log4j2?之前爆過嚴重的漏洞,所以我們這次就只關(guān)注?Logback,本文重點給大家介紹如何為?Spring?Boot?項目配置?Logback?日志,感興趣的朋友跟隨小編一起看看吧

關(guān)于 Logback

日志系統(tǒng)是一個線上項目必備的素質(zhì)之一,代表性的日志框架 Log4j、SLF4J、Logback 這哥仨竟然是親兄弟,他們有一個親爹,那就是巨佬 Ceki Gulcu。

由于 Spring Boot 的默認日志框架選用的 Logback,再加上 Log4j2 之前爆過嚴重的漏洞,所以我們這次就只關(guān)注 Logback。

1)Logback 非常自然地實現(xiàn)了 SLF4J,不需要像 Log4j 和 JUL 那樣加一個適配層。

2)Spring Boot 的默認日志框架使用的是 Logback,啟動編程喵項目的時候就可以看到 Logback 記錄的日志了

怎么看出來是 logback 呢?

說實話,看不出來,哈哈哈,不過可以從 Spring Boot 官網(wǎng)找到證據(jù)。

源碼中也偶有

3)logback 分為三個模塊:

  • logback-core,核心模塊,提供了關(guān)鍵的通用機制;
  • logback-classic,可以看作是 log4j 的改進版,實現(xiàn)了簡單的日志門面 SLF4J;
  • logback-access,主要用來和 Servlet 容器交互,比如說 Tomcat,提供了一些 HTTP 訪問的功能。

如果想研究 logback 源碼的話,可以按照這三個模塊去研究

直接上手

不廢話,直接新建一個空的 Spring Boot 項目,在測試類中加上兩行代碼。

@SpringBootTest
class CodingmoreLogbackApplicationTests {
	static Logger logger = LoggerFactory.getLogger(CodingmoreLogbackApplicationTests.class);
	@Test
	void contextLoads() {
		logger.info("logback testing");
	}
}

Logger 和 LoggerFactory 都來自 SLF4J,所以如果項目是從 Log4j + SLF4J 切換到 Logback 的話,此時的代碼是零改動的。

其他什么也不用做,運行后就可以看到 logback 已經(jīng)正常工作了。

在沒有配置文件的情況下,一切都是默認的,Logback 的日志信息會輸出到控制臺??梢酝ㄟ^ StatusPrinter 來打印 Logback 的內(nèi)部信息:

LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);

再次運行測試類,可以在控制臺看到以下信息:

也就是說,Logback 會在 classpath 路徑下先尋找 logback-test.xml 文件,沒有找到的話,尋找 logback.xml 文件,都找不到的話,就輸出到控制臺。

并且,Logger 的默認日志級別是 INFO 級別的,這就意味著如果嘗試下面的代碼:

logger.debug("哈哈哈哈");

控制臺是看不到這行日志輸出的。Logback 的日志級別是這樣的:

TRACE < DEBUG < INFO <  WARN < ERROR

也就是說小于 INFO 級別的日志都不會記錄,只有大于等于 INFO 級別的日志才會被記錄

編程喵實戰(zhàn)項目的日志案例分析

盡管默認配置很有用,但它很可能不能滿足我們的實際開發(fā)需求,于是我們需要找到一種更優(yōu)雅的解決方案。

當(dāng) src/main/resources 目錄下有以下名稱之一的配置文件時,Spring Boot 將自動加載它來作為 Logback 的配置項:

  • logback-spring.xml
  • logback.xml
  • logback-spring.groovy
  • logback.groovy

Spring Boot 建議我們使用 -spring 結(jié)尾的配置文件,這樣可以使用 Spring Boot 的 Pro?le 功能(針對不同的環(huán)境(開發(fā)環(huán)境、測試環(huán)境、正式環(huán)境)提供不同的配置項)。

編程喵用的是 logback-spring.xml(在 codingmore-admin 項目下可以找得到):

<?xml version="1.0" encoding="UTF-8"?>
<!--
scan:當(dāng)此屬性設(shè)置為true時,配置文件如果發(fā)生改變,將會被重新加載,默認值為true。
scanPeriod:設(shè)置監(jiān)測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒當(dāng)scan為true時,此屬性生效。默認的時間間隔為1分鐘。
debug:當(dāng)此屬性設(shè)置為true時,將打印出logback內(nèi)部日志信息,實時查看logback運行狀態(tài)。默認值為false。
-->
<configuration>
    <!-- https://github.com/spring-projects/spring-boot/blob/v1.4.2.RELEASE/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <!-- 定義日志文件名稱 -->
    <property name="APP_NAME" value="codingmore-admin" />
    <!-- 定義日志文件的路徑 -->
    <property name="LOG_PATH" value="${user.home}/${APP_NAME}/logs" />
    <!-- 定義日志的文件名 -->
    <property name="LOG_FILE" value="${LOG_PATH}/${APP_NAME}.log" />
    <!-- 滾動記錄日志,先將日志記錄到指定文件,當(dāng)符合某個條件時,將日志記錄到其他文件 -->
    <appender name="APPLICATION"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 指定日志文件的名稱 -->
        <file>${LOG_FILE}</file>
        <!--
          當(dāng)發(fā)生滾動時,決定 RollingFileAppender 的行為,涉及文件移動和重命名
          TimeBasedRollingPolicy: 最常用的滾動策略,它根據(jù)時間來制定滾動策略,既負責(zé)滾動也負責(zé)觸發(fā)滾動。
          -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--
           滾動時產(chǎn)生的文件的存放位置及文件名稱
           %d{yyyy-MM-dd}:按天進行日志滾動
           %i:當(dāng)文件大小超過maxFileSize時,按照i進行文件滾動
           -->
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--
           可選節(jié)點,控制保留的歸檔文件的最大數(shù)量,超出數(shù)量就刪除舊文件。假設(shè)設(shè)置每天滾動,
           且maxHistory是7,則只保存最近7天的文件,刪除之前的舊文件。
           注意,刪除舊文件時,那些為了歸檔而創(chuàng)建的目錄也會被刪除。
           -->
            <maxHistory>7</maxHistory>
            <!--
           當(dāng)日志文件超過maxFileSize指定的大小時,根據(jù)上面提到的%i進行日志文件滾動
           注意此處配置SizeBasedTriggeringPolicy是無法實現(xiàn)按文件大小進行滾動的,
           必須配置timeBasedFileNamingAndTriggeringPolicy
           -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>50MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 日志輸出格式: -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n</pattern>
        </layout>
    </appender>
    <!-- ch.qos.logback.core.ConsoleAppender 表示控制臺輸出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--
       日志輸出格式:
           %d表示日期時間,%green 綠色
           %thread表示線程名,%magenta 洋紅色
           %-5level:級別從左顯示5個字符寬度 %highlight 高亮色
           %logger{36} 表示logger名字最長36個字符,否則按照句點分割 %yellow 黃色
           %msg:日志消息
           %n是換行符
       -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%green(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%magenta(%thread)] %highlight(%-5level) %yellow(%logger{36}): %msg%n</pattern>
        </layout>
    </appender>
    <!--
    root與logger是父子關(guān)系,沒有特別定義則默認為root,任何一個類只會和一個logger對應(yīng),
    要么是定義的logger,要么是root,判斷的關(guān)鍵在于找到這個logger,然后判斷這個logger的appender和level。
    -->
    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="APPLICATION" />
    </root>
</configuration>

具體含義都寫在了注釋里,大家可以細致看一下,了解即可?;旧仙a(chǎn)環(huán)境下的 Logback 配置就是這樣的,可微調(diào)。

也可以使用下面這份 logback-spring.xml。

<?xml version="1.0" encoding="UTF-8"?>
<configuration >
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="APP_NAME" value="codingmore-admin" />
    <property name="LOG_PATH" value="${user.home}/${APP_NAME}/logs" />
    <property name="LOG_FILE" value="${LOG_PATH}/codingmore-admin.log" />
    <appender name="APPLICATION"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <maxFileSize>50MB</maxFileSize>
            <totalSizeCap>2GB</totalSizeCap>
        </rollingPolicy>
    </appender>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>
    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="APPLICATION" />
    </root>
</configuration>

只說幾個不同的點。

FILE_LOG_PATTERNCONSOLE_LOG_PATTERN 是在 Spring Boot 中默認定義的。

使用 lombok 進行日志記錄

在上面的例子中,我們必須在類中聲明一個靜態(tài)的 Logger 對象才能在需要記錄日志的地方使用它。

static Logger logger = LoggerFactory.getLogger(CodingmoreLogbackApplicationTests.class);

這樣的樣板代碼令人生厭!

我們可以通過 lombok 的方式來解決這個問題,在 pom.xml 文件中加入依賴。

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
</dependency>

然后在類上加上 @Slf4j 注解,之后就可以直接使用 log(添加@Slf4j 注解后會自動添加一個 log 字段)來記錄日志了。

@SpringBootTest
@Slf4j
class CodingmoreLogbackApplicationTests {
	@Test
	void testSlf4j() {
		log.info("哈哈啊哈哈");
	}
}

運行該測試方法,可以在控制臺看到日志

日志文件也有

查看字節(jié)碼反編譯后的文件就明白了。lombok 在編譯的時候會自動添加一行代碼:

private static final Logger log = LoggerFactory.getLogger(CodingmoreLogbackApplicationTests.class);

logback 中文手冊

GitHub 上有一份 Logback 的中文手冊,總共有 150 多頁,主要包含以下基本的和高級的特性:

  • logback 的整體架構(gòu)
  • 討論 logback 最好的實踐以及反模式
  • logback 的 xml 配置方式
  • appender
  • encoder
  • layout
  • filter
  • 上下文診斷
  • Joran - logback 的配置系統(tǒng)

GitHub - YLongo/logback-chinese-manual: logback 中文手冊/文檔。

到此這篇關(guān)于如何為 Spring Boot 項目配置 Logback 日志的文章就介紹到這了,更多相關(guān)Spring Boot 配置 Logback 日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring cloud Ribbon用法及原理解析

    spring cloud Ribbon用法及原理解析

    這篇文章主要介紹了spring cloud Ribbon用法及原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • 使用idea插件進行java代碼生成的操作

    使用idea插件進行java代碼生成的操作

    這篇文章主要介紹了使用idea插件進行java代碼生成的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Spring Cloud Stream簡單用法

    Spring Cloud Stream簡單用法

    Spring cloud stream是為構(gòu)建微服務(wù)消息驅(qū)動而產(chǎn)生的一種框架。Spring Cloud Stream基于Spring boot的基礎(chǔ)上,可創(chuàng)建獨立的、生產(chǎn)級別的Spring應(yīng)用,并采用Spring Integration來連接消息中間件提供消息事件驅(qū)動,一起看看吧
    2021-07-07
  • Java圖形界面超實用使用教程

    Java圖形界面超實用使用教程

    在Java編程中圖形界面應(yīng)用程序是非常常見和重要的一部分,下面這篇文章主要給大家介紹了關(guān)于Java圖形界面的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Java實現(xiàn)調(diào)用ElasticSearch?API的示例詳解

    Java實現(xiàn)調(diào)用ElasticSearch?API的示例詳解

    這篇文章主要為大家詳細介紹了Java調(diào)用ElasticSearch?API的效果資料,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的可以了解一下
    2023-03-03
  • Java求10到100000之間的水仙花數(shù)算法示例

    Java求10到100000之間的水仙花數(shù)算法示例

    這篇文章主要介紹了Java求10到100000之間的水仙花數(shù)算法,結(jié)合實例形式分析了水仙花數(shù)的概念及相應(yīng)的java算法實現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • Lombok為啥這么牛逼?SpringBoot和IDEA官方都要支持它

    Lombok為啥這么牛逼?SpringBoot和IDEA官方都要支持它

    Lombok是一款Java代碼功能增強庫,在Github上已有9.8k+Star。這篇文章主要介紹了Lombok為啥這么牛逼?SpringBoot和IDEA官方都要支持它,需要的朋友可以參考下
    2020-12-12
  • java基于jdbc實現(xiàn)簡單學(xué)生管理系統(tǒng)

    java基于jdbc實現(xiàn)簡單學(xué)生管理系統(tǒng)

    本文主要主要介紹了java連接mysql數(shù)據(jù)庫的一個簡單學(xué)生系統(tǒng),通過jdbc連接數(shù)據(jù)庫。文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 如何用Eureka + Feign搭建分布式微服務(wù)

    如何用Eureka + Feign搭建分布式微服務(wù)

    Eureka是Spring Cloud Netflix的一部分,是一個服務(wù)注冊中心。其服務(wù)生態(tài)中主要有三個角色:Eureka注冊中心、服務(wù)提供者、服務(wù)消費者。服務(wù)提供者注冊到Eureka后,服務(wù)消費者就能夠直接向Eureka查詢當(dāng)前有哪些服務(wù)可用,再從中選取一個消費.本文講解如何搭建分布式微服務(wù)
    2021-06-06
  • JDK14的新特性:instanceof模式匹配的使用

    JDK14的新特性:instanceof模式匹配的使用

    這篇文章主要介紹了JDK 14的新特性:instanceof模式匹配的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評論