springboot讀取外部配置文件,spring整合logback

 2023-10-01 阅读 30 评论 0

摘要:文章目錄1 場景1.1 版本說明1.2 代碼地址1.3 項目結構2 整合步驟2.1 配置maven依賴2.2 配置web.xml2.3 logback配置3 其他配置3.1 管理mybatis日志3.2 常用擴展 1 場景 spring中整合logback。 logback官網: http://logback.qos.ch/ self4j官網: http://www.slf

文章目錄

      • 1 場景
        • 1.1 版本說明
        • 1.2 代碼地址
        • 1.3 項目結構
      • 2 整合步驟
        • 2.1 配置maven依賴
        • 2.2 配置web.xml
        • 2.3 logback配置
      • 3 其他配置
        • 3.1 管理mybatis日志
        • 3.2 常用擴展

1 場景

spring中整合logback。

logback官網: http://logback.qos.ch/

self4j官網: http://www.slf4j.org/

1.1 版本說明

jdk版本: 1.8

spring版本:5.2.2.RELEASE

logback版本:1.2.3

1.2 代碼地址

https://github.com/yjhcpdd/mymvc

1.3 項目結構

--java
--resources--conf--properties-logback.xml***[1]

**java外層包路徑為:**com.demo.cs

2 整合步驟

2.1 配置maven依賴

<!-- ==========【日志類】========== -->
<!-- logback依賴包(初始化內容,是通過System.out控制臺的方式) -->
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version>
</dependency>
<!-- commons-logging日志橋接器(日志輸出重定向到SLF4J) -->
<dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>1.7.30</version>
</dependency>
<!-- log4j日志橋接器(日志輸出重定向到SLF4J) -->
<dependency><groupId>org.slf4j</groupId><artifactId>log4j-over-slf4j</artifactId><version>1.7.30</version>
</dependency>
<!-- logback集成spring(可以不集成,集成后,可在web.xml中進行配置) -->
<dependency><groupId>org.logback-extensions</groupId><artifactId>logback-ext-spring</artifactId><version>0.1.5</version>
</dependency>

2.2 配置web.xml

此步可以跳過,經過校驗,不進行此配置,logback和spring也能正常整合。如果沒有必要,可以跳過此步驟。

<!-- logback日志配置(不需 要配置)此配置用于:(1)替換logbackConfigLocation內容中的占位符${}[用于不同環境引用不同的配置文件],默認即會進行替換;(2)JUL橋接到SLF4J[已在pom中進行了橋接,此處不再需要];) -->
<context-param><param-name>logbackConfigLocation</param-name><param-value>classpath:logback.xml</param-value>
</context-param>
<listener><listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
</listener>

2.3 logback配置

在resources主目錄下,創建并配置配置文件:logback.xml[1],參數說明已在注釋中。

配置文件的主要結構(偽代碼)如下:

<configuration><!-- 全局參數 --><property /><!-- 日志輸出源(控制臺) --><appender class="ch.qos.logback.core.ConsoleAppender"/><!-- 日志輸出源(滾動輸出到文件,可過濾日志級別) --><appender class="ch.qos.logback.core.rolling.RollingFileAppender"/><!-- 日志輸出原(異步輸出,保證效率) --><appender class="ch.qos.logback.classic.AsyncAppender"><!-- 關聯的具體日志輸出源(滾動輸出到文件) --><appender-ref ref="xxx"/></appender><!-- 全局日志管理 --><root level="xxx"><!-- 全局日志輸出源 --><appender-ref ref="xxx"/><appender-ref ref="xxx"/></root><!-- 定制日志輸出源(用于定制輸出“指定類”或者“指定接口”的日志) --><logger name="com.xxx.xxx.xxx" level="xxx" additivity="false"><appender-ref ref="xxx"/></logger>
</configuration>

以下配置文件實現了如下功能:
(1)控制臺輸出日志級別DEBUG、WARN、ERROR的日志信息
(2)DEBUG、WARN、ERROR級別的日志,分別滾動打印到tomcat目錄下logback-logs文件夾下的指定文件中。一天一個日志文件夾,文件保留10天,每天的文件大小超過100MB,會產生新的日志文件,文件名包括當天文件序號和文件的創建時間
(3)可通過注釋掉的logger節點,在線配置某個包或者某個類下的日志級別輸出源
(4)配置文件可在線更改,60s自動檢測一次后生效。

此配置可做生產使用:

<?xml version="1.0" encoding="UTF-8"?>
<!--【configuration屬性配置】(1)scan:當此屬性設置為true時,配置文件如果發生改變,將會被重新加載,默認值為true。(2)scanPeriod:設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan為true時,此屬性生效。默認的時間間隔為1分鐘。(3)debug:當此屬性設置為true時,將打印出logback內部日志信息,實時查看logback運行狀態。默認值為false。-->
<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 上下文名稱,默認default --><!--<contextName>default</contextName>--><!-- 定義變量:通用日志輸出格式%d:日期;%thread:線程名;%-5level:左對齊5個字符顯示日志級別;%logger:日志位置;%msg:日志消息;%n:換行符;--><property name="COMMON_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] [%-5level] %logger - %msg%n" /><!-- 定義變量:日志文件輸出路徑(只可定義絕對路徑,${catalina.home}為環境變量中的tomcat根目錄) --><property name="LOG_HOME" value="${catalina.home}/logback-logs" /><!-- 日志寫到控制臺(appender:負責寫日志的組件) --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><!-- 輸出格式化 --><pattern>${COMMON_LOG_PATTERN}</pattern></encoder></appender><!-- ==========DEBUG級別日志配置========== --><!-- DEBUG輸出到文件(每天生成帶日期文件,文件大小最大1k) --><appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 日志過濾器,只過濾需要的日志 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>DEBUG</level>  <onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><!-- 按照日期和大小循環生成日志 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 文件名格式 --><fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/debug.%d{yyyy-MM-dd}.(%i).%d{HHmmss}.log</fileNamePattern><!-- 每個文件最大 --><maxFileSize>100MB</maxFileSize><!-- 日志最大的歷史 10天 --><maxHistory>10</maxHistory></rollingPolicy><encoder><!-- 輸出格式化 --><pattern>${COMMON_LOG_PATTERN}</pattern></encoder></appender><!-- 異步DEBUG輸出到文件(使用異步日志,先寫入阻塞隊列,再寫入磁盤。避免日志記錄時會占用大量的CPU和IO資源) --><appender name="ASYNC_DEBUG_FILE" class="ch.qos.logback.classic.AsyncAppender"><!-- 默認當BlockingQueue還有20%容量,將丟棄TRACE、DEBUG和INFO級別的event,只保留WARN和ERROR級別的event。為了保持所有的events,設置該值為0。 --><discardingThreshold>0</discardingThreshold><!-- 隊列大小,默認256,該值會影響性能 --><queueSize>1024</queueSize><!-- 關聯appender --><appender-ref ref="DEBUG_FILE"/></appender><!-- ==========WARN級別日志配置========== --><!-- WARN輸出到文件(每天生成帶日期文件,文件大小最大1k) --><appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 日志過濾器,只過濾需要的日志 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>WARN</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><!-- 按照日期和大小循環生成日志 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 文件名格式 --><fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/warn.%d{yyyy-MM-dd}.(%i).%d{HHmmss}.log</fileNamePattern><!-- 每個文件最大 --><maxFileSize>100MB</maxFileSize><!-- 日志最大的歷史 10天 --><maxHistory>10</maxHistory></rollingPolicy><encoder><!-- 輸出格式化 --><pattern>${COMMON_LOG_PATTERN}</pattern></encoder></appender><!-- 異步WARN輸出到文件(使用異步日志,先寫入阻塞隊列,再寫入磁盤。避免日志記錄時會占用大量的CPU和IO資源) --><appender name="ASYNC_WARN_FILE" class="ch.qos.logback.classic.AsyncAppender"><!-- 默認當BlockingQueue還有20%容量,將丟棄TRACE、DEBUG和INFO級別的event,只保留WARN和ERROR級別的event。為了保持所有的events,設置該值為0。 --><discardingThreshold>0</discardingThreshold><!-- 隊列大小,默認256,該值會影響性能 --><queueSize>1024</queueSize><!-- 關聯appender --><appender-ref ref="WARN_FILE"/></appender><!-- ==========ERROR級別日志配置========== --><!-- ERROR輸出到文件(每天生成帶日期文件,文件大小最大1k) --><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 日志過濾器,只過濾需要的日志 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><!-- 按照日期和大小循環生成日志 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 文件名格式 --><fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/error.%d{yyyy-MM-dd}.(%i).%d{HHmmss}.log</fileNamePattern><!-- 每個文件最大 --><maxFileSize>100MB</maxFileSize><!-- 日志最大的歷史 10天 --><maxHistory>10</maxHistory></rollingPolicy><encoder><!-- 輸出格式化 --><pattern>${COMMON_LOG_PATTERN}</pattern></encoder></appender><!-- 異步ERROR輸出到文件(使用異步日志,先寫入阻塞隊列,再寫入磁盤。避免日志記錄時會占用大量的CPU和IO資源) --><appender name="ASYNC_ERROR_FILE" class="ch.qos.logback.classic.AsyncAppender"><!-- 默認當BlockingQueue還有20%容量,將丟棄TRACE、DEBUG和INFO級別的event,只保留WARN和ERROR級別的event。為了保持所有的events,設置該值為0。 --><discardingThreshold>0</discardingThreshold><!-- 隊列大小,默認256,該值會影響性能 --><queueSize>1024</queueSize><!-- 關聯appender --><appender-ref ref="ERROR_FILE"/></appender><!-- ==========CUSTOM級別日志配置========== --><!-- CUSTOM輸出到文件(每天生成帶日期文件,文件大小最大1k) --><appender name="CUSTOM_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 按照日期和大小循環生成日志 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 文件名格式 --><fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/custom/custom.%d{yyyy-MM-dd}.(%i).%d{HHmmss}.log</fileNamePattern><!-- 每個文件最大 --><maxFileSize>100MB</maxFileSize><!-- 日志最大的歷史 10天 --><maxHistory>10</maxHistory></rollingPolicy><encoder><!-- 輸出格式化 --><pattern>${COMMON_LOG_PATTERN}</pattern></encoder></appender><!-- 異步CUSTOM輸出到文件(使用異步日志,先寫入阻塞隊列,再寫入磁盤。避免日志記錄時會占用大量的CPU和IO資源) --><appender name="ASYNC_CUSTOM_FILE" class="ch.qos.logback.classic.AsyncAppender"><!-- 默認當BlockingQueue還有20%容量,將丟棄TRACE、DEBUG和INFO級別的event,只保留WARN和ERROR級別的event。為了保持所有的events,設置該值為0。 --><discardingThreshold>0</discardingThreshold><!-- 隊列大小,默認256,該值會影響性能 --><queueSize>1024</queueSize><!-- 關聯appender --><appender-ref ref="CUSTOM_FILE"/></appender><!-- “根”日志的記錄器(root日志記錄器的默認level是DEBUG),最多一個root元素日志級別:TRACE<DEBUG<INFO<WARN<ERROR日志級別定義在類:ch.qos.logback.classic.Level--><root level="WARN"><appender-ref ref="STDOUT"/><appender-ref ref="DEBUG_FILE"/><appender-ref ref="ASYNC_WARN_FILE"/><appender-ref ref="ASYNC_ERROR_FILE"/></root><!-- 指定包打印日志(一般用于定制輸出日志)。name:用來指定某個包或者某個類的日志打印(包名可以是類的全路徑,也可以是部分包名)value:最小日志級別additivity:(false:子logger只在自己的appender中輸出;true:logger不止會在自己的appender里輸出,還會在root的logger的appender里輸出)--><!-- <logger name="com.demo.cs.template.controller" level="INFO" additivity="false"><appender-ref ref="STDOUT"/><appender-ref ref="ASYNC_CUSTOM_FILE"/></logger>-->
</configuration>

3 其他配置

3.1 管理mybatis日志

如果spring中整合了mybatis,想要設置mybatis的日志也受logback進行日志管理。

可以將mybatis的日志實現交由slf4j,由slf4j的實現logback來實現相應的日志管理。

在mybatis中進行如下配置:

<settings><!-- 指定 MyBatis 所用日志的具體實現,未指定時將自動查找 --><setting name="logImpl" value="SLF4J"/>
</settings>

3.2 常用擴展

logback有兩個特點:

(1)可以設置logback配置文件的刷新時間,在線更改配置文件,一定時間間隔內自動生效,無需重啟項目
(2)可以配置logger節點,將關注的某個類或者某個包下的指定日志級別的日志,輸出到指定文件中

這兩個特點,可以快速在線上調試日志,方便熱點找問題

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/109433.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息