最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot 日志實現(xiàn)過程

 更新時間:2025年01月08日 11:41:20   作者:Leaf吧  
Spring Boot 使用 SLF4J 作為日志門面,Logback 或 Log4j2 作為日志實現(xiàn),日志門面提供統(tǒng)一接口,簡化日志記錄,實現(xiàn)負責具體功能,Spring Boot 默認使用 SLF4J 和 Logback,可以通過配置文件或注解進行日志記錄和控制,感興趣的朋友一起看看吧

日志

日志框架可以分為 日志門面(Facade) 和 日志實現(xiàn)(Implementation),Spring Boot 使用了 SLF4J 作為日志門面,Logback 或 Log4j2 作為日志實現(xiàn)。

日志門面以及日志實現(xiàn)

日志門面

日志門面(Facade)
日志門面 是一個設計模式中的“門面模式(Facade Pattern)”,它提供了統(tǒng)一的接口,簡化了日志記錄的使用,屏蔽了不同日志框架之間的細節(jié)。
門面本身并不實現(xiàn)日志的具體記錄功能,它只是提供了日志記錄的 API 規(guī)范,開發(fā)者通過這些規(guī)范來記錄日志。
典型的日志門面框架是 SLF4J(Simple Logging Facade for Java),它定義了一組通用的日志接口,開發(fā)者通過這些接口來進行日志記錄。

日志實現(xiàn)

日志實現(xiàn) 是實際執(zhí)行日志記錄的組件,它負責處理日志的輸出、格式化、存儲等具體功能。
日志實現(xiàn)提供了對日志的具體管理方式,包括日志級別、輸出位置、格式、日志文件的滾動與清理等。
常見的日志實現(xiàn)框架有:
Logback:Spring Boot 默認使用的日志框架,提供了功能豐富的日志管理和配置。
Log4j2:Apache 提供的日志框架,相較于 Logback 提供了更多的性能優(yōu)化(如異步日志處理)和擴展性。

兩者關系

門面(Facade) 是日志框架的統(tǒng)一接口,開發(fā)者通過它來調用日志功能。
實現(xiàn)(Implementation) 是執(zhí)行日志記錄、管理和配置的具體框架,處理如何生成、存儲和輸出日志。

springboot中日志的配置

Spring Boot 默認配置 中,SLF4J 是日志門面Logback 是默認的日志實現(xiàn)框架。你無需做任何特別的配置,只要在 Spring Boot 項目中添加了相關依賴,Spring Boot 會自動配置日志系統(tǒng)。
當你在代碼中使用 SLF4J 的日志接口時(例如:Logger logger = LoggerFactory.getLogger(YourClass.class)),日志實際上會被傳遞給 Logback(或者 Log4j2)。

如何使用slf4j進行日志記錄

通過 SLF4J 提供的日志接口進行日志記錄

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyService {
    private static final Logger logger = LoggerFactory.getLogger(MyService.class);
    public void doSomething() {
        logger.info("Starting the task...");
        try {
            // 執(zhí)行任務
        } catch (Exception e) {
            logger.error("An error occurred", e);
        }
    }
}

LoggerFactory.getLogger(MyService.class) 獲取了一個 Logger 實例,這個實例是通過 SLF4J 提供的 API 來使用的。你通過這個 Logger 來記錄日志(如 info, error 等)。
但是,日志實際的記錄過程是由 Logback 或 Log4j2 執(zhí)行的,這些框架提供了具體的日志輸出方式、格式化和管理機制。

優(yōu)化 使用Lombok 依賴

再pom.xml文件添加lombok依賴

    <dependency>
        <groupId>org.project.lombok<groupId>
        <artifactId>lombok<artifactId>
    <dependency>

再類上添加@Slf4j注解,然后直接使用log.info(“日志”);

@Service
@Slf4j
public class TestServiceImpl  implements TestService{
    @Resource(name = "poolExecutor")
    private ThreadPoolTaskExecutor executor;
    @Override
    public String test() {
        ThreadPoolTaskExecutor taskExecutor = executor;
        // 獲取線程池信息
        int activeCount = taskExecutor.getActiveCount();
        int corePoolSize = taskExecutor.getCorePoolSize();
        int poolSize = taskExecutor.getPoolSize();
        taskExecutor.execute(()->{
                System.out.printf(activeCount+"--"+corePoolSize);
        });
        log.info("日志");
        return null;
    }
}

如何控制日志輸出

控制日志輸出就需要日志實現(xiàn)了logback或者log4j2
這里使用logback舉例
Spring Boot 支持兩種日志配置方式:通過 application.yml/application.properties 文件配置 和 通過 logback-spring.xml 配置文件進行詳細配置。這兩種方式各有不同的適用場景

application.yml

示例

logging:
  level:
    root: INFO  # 根日志級別
    com.example: DEBUG  # 某個包的日志級別
  file:
    name: E:\IDE\demlNewLog\myapp.log  # 日志文件路徑
    path: E:\IDE\demlNewLog
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"  # 控制臺輸出格式

logback-spring.xml

當你需要更細致地控制日志行為(如日志的滾動策略、異步日志、日志文件分割、過濾器等高級功能)時,你可以使用 logback-spring.xml 配置文件。這種方式提供了非常靈活和強大的日志配置能力。

創(chuàng)建 logback-spring.xml 配置文件: 將 logback-spring.xml 文件放在 src/main/resources 目錄下,這樣 Spring Boot 會自動讀取該文件。名字必須是 logback-spring.xml(springboot專有的)才能覆蓋logback配置

Spring Boot 自動讀取 logback-spring.xml 配置

如果存在 logback-spring.xml 配置文件,Spring Boot 會自動加載它,覆蓋默認的 Logback 配置。
logback-spring.xml 文件與普通的 logback.xml 文件的不同之處在于,logback-spring.xml 文件支持 Spring 的配置和屬性注入,例如可以使用 Spring 的 PropertySource 來動態(tài)設置日志級別、輸出路徑等。

再resource目錄下創(chuàng)建logback-spring.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <!-- appender是configuration的子節(jié)點,是負責寫日志的組件。 -->
    <!-- ConsoleAppender:把日志輸出到控制臺 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 默認情況下,每個日志事件都會立即刷新到基礎輸出流。 這種默認方法更安全,因為如果應用程序在沒有正確關閉appender的情況下退出,則日志事件不會丟失。但是,為了顯著增加日志記錄吞吐量,可以將immediateFlush屬性設置為false -->
        <!--<immediateFlush>true</immediateFlush>-->
        <encoder>
            <!-- %37():如果字符沒有37個字符長度,則左側用空格補齊 -->
            <!-- %-37():如果字符沒有37個字符長度,則右側用空格補齊 -->
            <!-- %15.15():如果記錄的線程字符長度小于15(第一個)則用空格在左側補齊,如果字符長度大于15(第二個),則從開頭開始截斷多余的字符 -->
            <!-- %-40.40():如果記錄的logger字符長度小于40(第一個)則用空格在右側補齊,如果字符長度大于40(第二個),則從開頭開始截斷多余的字符 -->
            <!-- %msg:日志打印詳情 -->
            <!-- %n:換行符 -->
            <!-- %highlight():轉換說明符以粗體紅色顯示其級別為ERROR的事件,紅色為WARN,BLUE為INFO,以及其他級別的默認顏色。 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) --- [%15.15(%thread)] %cyan(%-40.40(%logger{40})) : %msg%n</pattern>
            <!-- 控制臺也要使用UTF-8,不要使用GBK,否則會中文亂碼 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- info 日志文件-->
    <!-- RollingFileAppender:滾動記錄文件,先將日志記錄到指定文件,當符合某個條件時,將日志記錄到其他文件 -->
    <!-- 以下的大概意思是:
		1.先按日期存日志,日期變了,將前一天的日志文件名重命名為XXX%日期%索引,新的日志仍然是project_info.log
    	2.如果日期沒有發(fā)生變化,但是當前日志的文件大小超過10MB時,對當前日志進行分割 重命名-->
    <appender name="info_log" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志文件路徑和名稱-->
        <File>E:\IDE\demlNewLog\info.log</File>
        <!--是否追加到文件末尾,默認為true-->
        <append>true</append>
        <!-- 打印除了ERROR的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch> <!-- 如果命中ERROR就禁止這條日志 -->
            <onMismatch>ACCEPT</onMismatch> <!-- 如果沒有命中就使用這條規(guī)則 -->
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志文件的名字會根據(jù)fileNamePattern的值,每隔一段時間改變一次 -->
            <!-- 文件名示例:logs/project_info.2017-12-05.0.log -->
            <!-- 注意:SizeAndTimeBasedRollingPolicy中 %i和%d令牌都是強制性的,必須存在,否則報錯 -->
            <fileNamePattern>logs/project_info.%d.%i.log</fileNamePattern>
            <!-- 每產(chǎn)生一個日志文件,該日志文件的保存期限為30天 -->
            <!-- 注:maxHistory的單位是根據(jù)fileNamePattern中的翻轉策略自動推算出來的,例如上面選用了yyyy-MM-dd,則單位為天,如果上面選用了yyyy-MM,則單位為月。另外上面的單位默認為yyyy-MM-dd-->
            <maxHistory>30</maxHistory>
            <!-- 每個日志文件到10mb的時候開始切分,最多保留30天,但最大到20GB,哪怕沒到30天也要刪除多余的日志 -->
            <totalSizeCap>20GB</totalSizeCap>
            <!-- maxFileSize:這是活動文件的大小,默認值是10MB,測試時可改成5KB看效果 -->
            <maxFileSize>10MB</maxFileSize>
        </rollingPolicy>
        <!--編碼器-->
        <encoder>
            <!-- pattern節(jié)點,用來設置日志的輸入格式 ps:日志文件中不要設置顏色,否則顏色部分會有ESC[0:39em等亂碼-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%15.15(%thread)] %-40.40(%logger{40}) : %msg%n</pattern>
            <!-- 記錄日志的編碼:此處設置字符集 - -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- error 日志文件-->
    <appender name="error_log" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志文件路徑和名稱-->
        <File>E:\IDE\demlNewLog\error.log</File>
        <!--是否追加到文件末尾,默認為true-->
        <append>true</append>
        <!-- ThresholdFilter過濾低于指定閾值的事件。 對于等于或高于閾值的事件,ThresholdFilter將在調用其decision()方法時響應NEUTRAL。 但是,將拒絕級別低于閾值的事件 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- 低于ERROR級別的日志(debug,info)將被拒絕,等于或者高于ERROR的級別將相應NEUTRAL -->
            <level>ERROR</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 活動文件的名字會根據(jù)fileNamePattern的值,每隔一段時間改變一次 -->
            <!-- 文件名示例:logs/project_error.2017-12-05.0.log -->
            <!-- 注意:SizeAndTimeBasedRollingPolicy中 %i和%d令牌都是強制性的,必須存在,要不會報錯 -->
            <fileNamePattern>logs/project_error.%d.%i.log</fileNamePattern>
            <!-- 每產(chǎn)生一個日志文件,該日志文件的保存期限為30天 -->
            <maxHistory>30</maxHistory>
            <!-- 每個日志文件到10mb的時候開始切分,最多保留30天,但最大到20GB,哪怕沒到30天也要刪除多余的日志 -->
            <totalSizeCap>20GB</totalSizeCap>
            <!-- maxFileSize:這是活動文件的大小,默認值是10MB,測試時可改成5KB看效果 -->
            <maxFileSize>10MB</maxFileSize>
        </rollingPolicy>
        <!--編碼器-->
        <encoder>
            <!-- pattern節(jié)點,用來設置日志的輸入格式-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%15.15(%thread)] %-40.40(%logger{40}) : %msg%n</pattern>
            <!-- 記錄日志的編碼:此處設置字符集 - -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- configuration中最多允許一個root,別的logger如果沒有設置級別則從父級別root繼承 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
    <!-- name屬性指定項目中某個包,當有日志操作行為時的日志記錄級別 -->
    <logger name="com.example.demonew.controller" level="INFO">
        <appender-ref ref="info_log" />
        <appender-ref ref="error_log" />
    </logger>
    <!-- 利用logback輸入mybatis的sql日志,
    注意:如果不加 additivity="false" 則此logger會將輸出轉發(fā)到自身以及祖先的logger中,就會出現(xiàn)日志文件中sql重復打印-->
    <logger name="com.example.demonew.service" level="DEBUG" additivity="false">
        <appender-ref ref="info_log" />
        <appender-ref ref="error_log" />
    </logger>
    <!-- additivity=false代表禁止默認累計的行為,即com.atomikos中的日志只會記錄到日志文件中,不會輸出層次級別更高的任何appender-->
    <logger name="com.example" level="INFO" additivity="false">
        <appender-ref ref="info_log" />
        <appender-ref ref="error_log" />
    </logger>
</configuration>

到此這篇關于springboot 日志實現(xiàn)的文章就介紹到這了,更多相關springboot 日志實現(xiàn)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java設計模式之享元模式實例詳解

    Java設計模式之享元模式實例詳解

    這篇文章主要介紹了Java設計模式之享元模式,結合實例形式詳細分析了享元模式的概念、功能、定義及使用方法,需要的朋友可以參考下
    2018-04-04
  • Spring中的事務管理如何配置

    Spring中的事務管理如何配置

    這篇文章主要介紹了spring中的事務管理如何配置,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Spring Boot使用Allatori代碼混淆的方法

    Spring Boot使用Allatori代碼混淆的方法

    這篇文章主要介紹了Spring Boot使用Allatori代碼混淆的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 高并發(fā)計數(shù)器LongAdder 實現(xiàn)原理與使用場景詳解

    高并發(fā)計數(shù)器LongAdder 實現(xiàn)原理與使用場景詳解

    這篇文章主要介紹了高并發(fā)計數(shù)器LongAdder 實現(xiàn)原理與使用場景詳解,通過理解 LongAdder 的設計哲學和實現(xiàn)細節(jié),開發(fā)者可以在高并發(fā)場景中做出更優(yōu)的技術選型,在保證線程安全的前提下實現(xiàn) 5-10 倍的性能提升,需要的朋友可以參考下
    2025-06-06
  • Servlet中文亂碼問題解決方案解析

    Servlet中文亂碼問題解決方案解析

    這篇文章主要介紹了Servlet中文亂碼問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Java線程的異常處理機制詳情

    Java線程的異常處理機制詳情

    這篇文章主要介紹了Java線程的異常處理機制詳情,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • Java使用EasyExcel生成動態(tài)表頭和多Sheet數(shù)據(jù)的Excel實例

    Java使用EasyExcel生成動態(tài)表頭和多Sheet數(shù)據(jù)的Excel實例

    這篇文章主要介紹了Java使用EasyExcel生成動態(tài)表頭和多Sheet數(shù)據(jù)的Excel實例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Spring?Data?Exists查詢最佳方法編寫示例

    Spring?Data?Exists查詢最佳方法編寫示例

    這篇文章主要為大家介紹了Spring?Data?Exists查詢最佳方法編寫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 詳解pom.xml中maven profile的激活方式

    詳解pom.xml中maven profile的激活方式

    本文主要介紹了詳解pom.xml中maven profile的激活方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Springboot發(fā)送郵件功能的實現(xiàn)詳解

    Springboot發(fā)送郵件功能的實現(xiàn)詳解

    電子郵件是—種用電子手段提供信息交換的通信方式,是互聯(lián)網(wǎng)應用最廣的服務。本文詳細為大家介紹了SpringBoot實現(xiàn)發(fā)送電子郵件功能的示例代碼,需要的可以參考一下
    2022-09-09

最新評論

临海市| 广西| 盈江县| 上犹县| 平阳县| 精河县| 长治县| 青铜峡市| 达拉特旗| 宁河县| 汉阴县| 田阳县| 睢宁县| 丹棱县| 通化市| 灵川县| 临西县| 玉山县| 西丰县| 淳化县| 武宁县| 大埔县| 横山县| 额敏县| 平湖市| 岑溪市| 金阳县| 巧家县| 丰镇市| 陈巴尔虎旗| 博罗县| 确山县| 思南县| 江门市| 荆门市| 屏南县| 乌兰浩特市| 和林格尔县| 平江县| 荥阳市| 双城市|