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

Springboot日志配置的實現(xiàn)示例

 更新時間:2024年08月19日 08:50:51   作者:愛琴孩  
本文主要介紹了Springboot日志配置的實現(xiàn)示例,使用slf4j和logback的方式記錄日志,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

Spring Boot 底層默認使用 slf4j 和 logback 的方式記錄日志。工程中依賴了 spring-boot-starter-web,它又依賴了 spring-boot-starter-logging,所以不需要再手動添加該依賴。在 Spring Boot 中,application.yml 支持部分 logback 的日志配置,但一些高級配置只能通過獨立的 xml 配置文件實現(xiàn),經(jīng)過 Spring Boot 的整合后,可支持多環(huán)境配置,但 logback 配置文件需要命名為 logback-spring.xml。如果使用了自定義日志配置文件,application.yml中 logging 有關(guān)配置就會失效。

springboot 默認的 logback 配置

SpringBoot 默認提供了一套 logback 的配置文件,位于 spring-boot依賴中的 org/springframework/boot/logging/logback/base.xml。

<included>
	<include resource="org/springframework/boot/logging/logback/defaults.xml" />
	<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
	<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
	<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
	<root level="INFO">
		<appender-ref ref="CONSOLE" />
		<appender-ref ref="FILE" />
	</root>
</included>

該文件引入了三個 xml 文件,并設(shè)置了root的日志級別為 info。console-appender.xml 和 file-appender.xml 中定義了日志的追加器,分別是名為 CONSOLE 的控制臺追加器 和 名為 FILE 的文件追加器。org/springframework/boot/logging/logback/defaults.xml 定義了 logback 的轉(zhuǎn)換器、一些包的日志級別、日志顯示格式。

<included>
	<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
	<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
	<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
	<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
	<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

	<appender name="DEBUG_LEVEL_REMAPPER" class="org.springframework.boot.logging.logback.LevelRemappingAppender">
		<destinationLogger>org.springframework.boot</destinationLogger>
	</appender>

	<logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
	<logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>
	<logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
	<logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>
	<logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
	<logger name="org.crsh.plugin" level="WARN"/>
	<logger name="org.crsh.ssh" level="WARN"/>
	<logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>
	<logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
	<logger name="org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration" level="WARN"/>
	<logger name="org.springframework.boot.actuate.endpoint.jmx" additivity="false">
		<appender-ref ref="DEBUG_LEVEL_REMAPPER"/>
	</logger>
	<logger name="org.thymeleaf" additivity="false">
		<appender-ref ref="DEBUG_LEVEL_REMAPPER"/>
	</logger>
</included>

默認在控制臺中顯示彩色日志,就是因為使用了轉(zhuǎn)換器 ColorConverter,顯示的格式為 CONSOLE_LOG_PATTERN 中使用了該轉(zhuǎn)換器。在我們的自定義配置中可以復(fù)用這個 default.xml 和 console-appender.xml。

自定義配置

在 src/main/resources/下創(chuàng)建配置文件 logback-spring.xml。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />

    <root level="INFO">
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

上面的配置引入了 spring boot 中 logback 的默認配置和 CONSOLE 追加器,并定義了 root 的日志級別為 info。

日志級別

日志有五個級別:trace、debug、info、warn、error,級別依次較高,配置了某個級別,就會輸出該級別及其以上的級別。如,配置日志級別為 warn,則日志會輸出 warn、error;如果配置日志級別為 debug,則會輸出 debug、info、warn、error。

   @RequestMapping(value = "/testLogLevel", method = RequestMethod.GET)
    public String testLogLevel() {
        LOGGER.trace("hello,愛琴孩!");
        LOGGER.debug("hello,愛琴孩!");
        LOGGER.info("hello,愛琴孩!");
        LOGGER.warn("hello,愛琴孩!");
        LOGGER.error("hello,愛琴孩!");
        return "Success";
    }

注意,引入的 Logger 和 LoggerFactory 兩個類都是 slf4j 包下面的。上面的代碼分別輸出五個級別的日志。啟動服務(wù),訪問 testLogLevel接口,控制臺輸出:

 控制臺值輸出 info、warn、error,可以看出 SpringBoot 默認輸出級別為 info??赏ㄟ^配置細粒度調(diào)整日志的級別:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    ...
	<logger name="com.example.study.controller" level="trace" additivity="false">
		<appender-ref ref="CONSOLE"/>
	</logger>
      ...
</configuration>

上面按照包名更改了日志的顯示級別,com.example.study.controller 包下面的日志都是 trace 級別。上面配置選項"additivity",用于控制日志消息在日志層級之間的傳播方式。在Logback中,每個日志記錄器(logger)都有一個與之關(guān)聯(lián)的層級(level)。當日志消息到達一個日志記錄器時,Logback會將其傳播到所有具有相同或更高層級的日志記錄器。默認情況下,Logback將日志消息傳播到所有父級日志記錄器。"additivity"的值可以是true或false。當"additivity"設(shè)置為true時,日志消息將被傳播到所有父級日志記錄器;當"additivity"設(shè)置為false時,日志消息將僅停留在當前日志記錄器中,不會傳播到父級日志記錄器。通過配置"additivity",可以更細粒度地控制日志消息在應(yīng)用程序中的流動,避免在特定的日志記錄器中重復(fù)記錄日志消息,也可以提高日志記錄的性能。

重新訪問 testLogLevel接口,error、warn、info、debug、trace 都會全部打印出來。

文件追加器

上面復(fù)用了 SpringBoot 自帶的控制臺追加器 CONSOLE,這里自定義文件追加器:

    <appender name="ServiceLogRollingFileAppender"
		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.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log
			</fileNamePattern>
		</rollingPolicy>
	</appender>

并在 root 中添加這個自定義 ServiceLogRollingFileAppender追加器:

<root level="INFO">
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="ServiceLogRollingFileAppender" />
</root>

多環(huán)境日志

假設(shè)希望在 local 時,只輸出控制臺日志;在其他環(huán)境(dev、test等)輸出控制臺日志和文件日志。SpringBoot 提供了 springProfile 標簽,通過該元素 name 屬性指定環(huán)境。修改 root 元素:

<root level="INFO">
    <springProfile name="local">
        <appender-ref ref="CONSOLE" />
    </springProfile>
    <springProfile name="!local">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="ServiceLogRollingFileAppender" />
    </springProfile>
</root>

分別使用 local 和 dev 啟動服務(wù),測試多環(huán)境是否生效。我們自定義的 logback-spring.xml 充分利用了 Spring Boot 官方提供的配置,最終完整配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<include resource="org/springframework/boot/logging/logback/defaults.xml" />
	<springProperty scop="context" name="LOG_SERVICE_NAME"  source="logging.service.name" />
	<property name="CONSOLE_LOG_PATTERN"
		value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_SERVICE_NAME}){faint} %clr(${PID:- }){magenta} %clr([%15.15t]){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(%-40.40class{39} %5.5L){cyan}%clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
	<property name="FILE_LOG_PATTERN"
		value="%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_SERVICE_NAME:-%5p} ${PID:- } [%t] ${LOG_LEVEL_PATTERN:-%5p} %-40.40class{39} %5.5L: %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
	<property name="LOG_FILE"
		value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}" />

	<include
		resource="org/springframework/boot/logging/logback/console-appender.xml" />

	<appender name="ServiceLogRollingFileAppender"
		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.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log
			</fileNamePattern>
		</rollingPolicy>
	</appender>

	<root level="INFO">
		<springProfile name="local">
			<appender-ref ref="CONSOLE" />
		</springProfile>
		<springProfile name="!local">
			<appender-ref ref="CONSOLE" />
			<appender-ref ref="ServiceLogRollingFileAppender" />
		</springProfile>
	</root>

	<logger name="com.example.study.controller" level="trace" additivity="false">
		<appender-ref ref="CONSOLE"/>
	</logger>

</configuration>

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

相關(guān)文章

  • Ubuntu 安裝 JDK8 的兩種方法(總結(jié))

    Ubuntu 安裝 JDK8 的兩種方法(總結(jié))

    下面小編就為大家?guī)硪黄猆buntu 安裝 JDK8 的兩種方法(總結(jié))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Spring Cloud之注冊中心Nacos的使用詳解

    Spring Cloud之注冊中心Nacos的使用詳解

    本文介紹SpringCloud Alibaba中的Nacos組件,對比了Nacos與Eureka的區(qū)別,展示了如何在項目中引入SpringCloud Alibaba和Nacos,并配置負載均衡,通過實際操作,驗證了服務(wù)注冊和負載均衡的功能,感興趣的朋友一起看看吧
    2025-03-03
  • spring事務(wù)Propagation及其實現(xiàn)原理詳解

    spring事務(wù)Propagation及其實現(xiàn)原理詳解

    這篇文章主要介紹了spring事務(wù)Propagation及其實現(xiàn)原理詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • shade解決mybatis包沖突問題

    shade解決mybatis包沖突問題

    這篇文章主要介紹了shade解決mybatis包沖突問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • mybatis?獲取更新(update)記錄的id之<selectKey>用法說明

    mybatis?獲取更新(update)記錄的id之<selectKey>用法說明

    這篇文章主要介紹了mybatis?獲取更新(update)記錄的id之<selectKey>用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java中ArrayList的常見用法示例小結(jié)

    Java中ArrayList的常見用法示例小結(jié)

    本文介紹了Java的ArrayList,它是一個動態(tài)數(shù)組,可以自動調(diào)整大小,支持添加、刪除、獲取元素等操作,同時,還討論了如何存儲基本數(shù)據(jù)類型以及在多線程環(huán)境下的使用注意事項,感興趣的朋友一起看看吧
    2025-02-02
  • Java集合框架之Stack Queue Deque使用詳解刨析

    Java集合框架之Stack Queue Deque使用詳解刨析

    早在 Java 2 中之前,Java 就提供了特設(shè)類。比如:Dictionary, Vector, Stack, 和 Properties 這些類用來存儲和操作對象組。雖然這些類都非常有用,但是它們?nèi)鄙僖粋€核心的,統(tǒng)一的主題。由于這個原因,使用 Vector 類的方式和使用 Properties 類的方式有著很大不同
    2021-10-10
  • 使用Arthas MCP對Java應(yīng)用進行線上診斷的實踐指南

    使用Arthas MCP對Java應(yīng)用進行線上診斷的實踐指南

    本文介紹了使用Arthas4.1.9診斷Java應(yīng)用常見問題(CPU飆高、內(nèi)存泄漏、死鎖、線程池滿、慢方法、異常被吞)的方法,并提出構(gòu)建一個全自動的Java應(yīng)用診斷系統(tǒng),通過AIagent結(jié)合MCP協(xié)議調(diào)用Arthas診斷工具,生成結(jié)構(gòu)化的診斷報告,簡化問題定位過程,需要的朋友可以參考下
    2026-05-05
  • java中Consumer接口的使用教程詳解

    java中Consumer接口的使用教程詳解

    Java?8?引入了?java.util.function?包,其中包含了一些常用的函數(shù)式接口,Consumer?接口是其中一個函數(shù)式接口,用于表示接受一個輸入?yún)?shù)并執(zhí)行某種操作的操作者,下面我們就來學習一下他的具體使用吧
    2023-12-12
  • 關(guān)于maven配置項目一直提示程序包不存在以及scope的坑

    關(guān)于maven配置項目一直提示程序包不存在以及scope的坑

    這篇文章主要介紹了關(guān)于maven配置項目一直提示程序包不存在以及scope的坑,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評論

句容市| 青神县| 濉溪县| 鄂州市| 冕宁县| 贵阳市| 兴安县| 渭南市| 兴义市| 湘阴县| 黄冈市| 怀仁县| 牟定县| 龙口市| 满洲里市| 宝应县| 旅游| 清苑县| 马龙县| 嵊州市| 洛扎县| 金山区| 梁河县| 高淳县| 丽江市| 筠连县| 河北省| 钦州市| 台湾省| 五家渠市| 微博| 华安县| 康定县| 安新县| 新郑市| 西乌珠穆沁旗| 楚雄市| 武安市| 滕州市| 东源县| 台中市|