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

logback之自定義指定日志文件存儲(chǔ)目錄方式

 更新時(shí)間:2023年03月10日 09:51:23   作者:cwh056056  
這篇文章主要介紹了logback之自定義指定日志文件存儲(chǔ)目錄方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

logback自定義指定日志文件存儲(chǔ)目錄

1、正常使用

定義一個(gè)logback.xml配置文件即可:

<?xml version="1.0" encoding="UTF-8" ?>
?
<configuration>
?
? ? <!-- 指定日志文件路徑(與當(dāng)前程序jar包同一目錄下) -->
?? ?<property name="LOG_HOME" value="logs" />
?
? ? <!--每天生成日志的類-->
? ? <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
? ? ? ? <filter class="ch.qos.logback.classic.filter.LevelFilter">
? ? ? ? ? ? <level>ERROR</level> ? <!--過濾掉error的級別-->
? ? ? ? ? ? <onMatch>DENY</onMatch>
? ? ? ? ? ? <onMismatch>ACCEPT</onMismatch>
? ? ? ? </filter>
? ? ? ? <encoder>
? ? ? ? ? ? <pattern>
? ? ? ? ? ? ? ? %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger - %msg%n
? ? ? ? ? ? </pattern>
? ? ? ? </encoder>
? ? ? ? <!--滾動(dòng)策略-->
? ? ? ? <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
? ? ? ? ? ? <!--路徑-->
? ? ? ? ? ? <fileNamePattern>${LOG_HOME}/mds-tool-box-info.%d.log</fileNamePattern>
? ? ? ? </rollingPolicy>
? ? </appender>
?
?
? ? <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
? ? ? ? <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
? ? ? ? ? ? <level>ERROR</level> ?<!--//打印error-->
? ? ? ? </filter>
? ? ? ? <encoder>
? ? ? ? ? ? <pattern>
? ? ? ? ? ? ? ? %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger - %msg%n
? ? ? ? ? ? </pattern>
? ? ? ? </encoder>
? ? ? ? <!--滾動(dòng)策略-->
? ? ? ? <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
? ? ? ? ? ? <!--路徑-->
? ? ? ? ? ? <fileNamePattern>${LOG_HOME}/mds-tool-box-error.%d.log</fileNamePattern>
? ? ? ? </rollingPolicy>
? ? </appender>
?
? ? <root level="info">
<!-- ? ? ? ?<appender-ref ref="consoleLog" />-->
? ? ? ? <appender-ref ref="fileInfoLog" />
? ? ? ? <appender-ref ref="fileErrorLog" />
? ? </root>
?
</configuration>

2、自定義指定日志文件存儲(chǔ)目錄

2.1 定義監(jiān)聽器

/**
?* @version 1.0
?* @class: CustomLogContextListener
?* @author: carlo
?* @mail: carlo_cwh@qq.com
?* @date: 2021/8/25 10:01
?* @description: 定義logback 日志監(jiān)聽器,指定日志文件存放目錄
?*/
public class CustomLogContextListener extends ContextAwareBase implements LoggerContextListener, LifeCycle {
?
? ? /** 存儲(chǔ)日志路徑標(biāo)識(shí) */
? ? public static final String LOG_PAHT_KEY = "LOG_PATH";
?
? ? @Override
? ? public boolean isResetResistant() {
? ? ? ? return false;
? ? }
?
? ? @Override
? ? public void onStart(LoggerContext loggerContext) {
?
? ? }
?
? ? @Override
? ? public void onReset(LoggerContext loggerContext) {
?
? ? }
?
? ? @Override
? ? public void onStop(LoggerContext loggerContext) {
?
? ? }
?
? ? @Override
? ? public void onLevelChange(Logger logger, Level level) {
?
? ? }
?
? ? @Override
? ? public void start() {
? ? ? ? // "user.dir"是指用戶當(dāng)前工作目錄
? ? ? ? String s = System.getProperty("user.dir") + "/logs/";
? ? ? ? System.setProperty(LOG_PAHT_KEY, s);
? ? ? ? Context context = getContext();
? ? ? ? context.putProperty(LOG_PAHT_KEY, ?s);
? ? }
?
? ? @Override
? ? public void stop() {
?
? ? }
?
? ? @Override
? ? public boolean isStarted() {
? ? ? ? return false;
? ? }
}

2.2 在logback.xml日志文件中指定監(jiān)聽器

<?xml version="1.0" encoding="UTF-8" ?>
?
<configuration>
?
? ? <!-- 監(jiān)聽器,指定日志文件存放目錄 -->
? ? <contextListener class="com.hh.listener.CustomLogContextListener" />
?
? ? <!--每天生成日志的類-->
? ? <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
? ? ? ? <filter class="ch.qos.logback.classic.filter.LevelFilter">
? ? ? ? ? ? <level>ERROR</level> ? <!--過濾掉error的級別-->
? ? ? ? ? ? <onMatch>DENY</onMatch>
? ? ? ? ? ? <onMismatch>ACCEPT</onMismatch>
? ? ? ? </filter>
? ? ? ? <encoder>
? ? ? ? ? ? <pattern>
? ? ? ? ? ? ? ? %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger - %msg%n
? ? ? ? ? ? </pattern>
? ? ? ? </encoder>
? ? ? ? <!--滾動(dòng)策略-->
? ? ? ? <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
? ? ? ? ? ? <!--路徑-->
? ? ? ? ? ? <fileNamePattern>${LOG_PATH}/mds-tool-box-info.%d.log</fileNamePattern>
? ? ? ? </rollingPolicy>
? ? </appender>
?
?
? ? <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
? ? ? ? <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
? ? ? ? ? ? <level>ERROR</level> ?<!--//打印error-->
? ? ? ? </filter>
? ? ? ? <encoder>
? ? ? ? ? ? <pattern>
? ? ? ? ? ? ? ? %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger - %msg%n
? ? ? ? ? ? </pattern>
? ? ? ? </encoder>
? ? ? ? <!--滾動(dòng)策略-->
? ? ? ? <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
? ? ? ? ? ? <!--路徑-->
? ? ? ? ? ? <fileNamePattern>${LOG_PATH}/mds-tool-box-error.%d.log</fileNamePattern>
? ? ? ? </rollingPolicy>
? ? </appender>
?
? ? <root level="info">
<!-- ? ? ? ?<appender-ref ref="consoleLog" />-->
? ? ? ? <appender-ref ref="fileInfoLog" />
? ? ? ? <appender-ref ref="fileErrorLog" />
? ? </root>
?
</configuration>

其中  ${LOG_PATH} 為我們在監(jiān)聽器中定義的 key 值

logback基本配置說明

logback繼承自log4j,它是spring boot默認(rèn)的日志集成框架,官網(wǎng)地址:https://logback.qos.ch/

spring boot默認(rèn)日志框架

當(dāng)我們啟動(dòng)spring boot項(xiàng)目的時(shí)候,沒有進(jìn)行任何日志的配置,控制臺(tái)能輸出日志,原因是spring boot內(nèi)置了org.springframework.boot.logging.logback日志,里面配置了base.xml文件,引入了基礎(chǔ)的日志輸出格式。

當(dāng)我們項(xiàng)目部署到服務(wù)器后,會(huì)在與jar同級的目錄下生成一個(gè)默認(rèn)日志文件,文件名為jar包的名稱。

自定義logback配置文件

默認(rèn)的日志文件,生成的日志格式配置不是我們所希望的,默認(rèn)日志輸出格式:

此時(shí)我們可以自定義logback配置文件,默認(rèn)的日志文件名為logback.xml,spring官方首推的默認(rèn)日志文件名為logback-spring.xml;若是我們想命名為其他的名稱,也是可以的,在properties或者yml配置文件中指明下日志路徑和名稱即可:

logging:
  config: classpath:logback-xxx.xml

日志文件統(tǒng)一放在目錄:src/resources之下。

配置文件說明

先來看一個(gè)完整的配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<!--自動(dòng)掃描配置文件,間隔周期是60秒,不打印logback的內(nèi)部日志信息-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!--根據(jù)spring激活的配置文件定義不同的屬性-->
    <springProfile name="local">
        <!--local環(huán)境,日志的存放位置-->
        <property name="LOG_HOME" value="/Users/work/tools/logs/xxx" />
        <!--local環(huán)境,控制臺(tái)輸出的日志級別-->
        <property name="CONSOLE_LEVEL" value="INFO" />
    </springProfile>
    <springProfile name="dev">
        <!--dev環(huán)境,日志的存放位置-->
        <property name="LOG_HOME" value="/u01/logs/xxx" />
        <!--pro環(huán)境,控制臺(tái)輸出的日志級別-->
        <property name="CONSOLE_LEVEL" value="OFF" />
    </springProfile>
    <springProfile name="pro">
        <!--pro環(huán)境,日志的存放位置-->
        <property name="LOG_HOME" value="/u01/logs/xxx" />
        <!--pro環(huán)境,控制臺(tái)輸出的日志級別-->
        <property name="CONSOLE_LEVEL" value="OFF" />
    </springProfile>
    <!--日志存放最大數(shù)量-->
    <property name="maxHistory" value="30"/>

    <!--定義控制臺(tái)輸出的日志信息-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!--把事件轉(zhuǎn)化成byte數(shù)組,并把數(shù)組輸出為文本-->
        <encoder>
            <!--定義輸出的日志格式-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{20} -%msg%n</pattern>
        </encoder>
        <!--過濾輸出的日志-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!--定義日志的級別,大于此級別才輸出日志-->
            <level>${CONSOLE_LEVEL}</level>
        </filter>
    </appender>
    
    <!--定義滾動(dòng)日志-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志的存放名:目錄+文件名-->
        <file>${LOG_HOME}/auth-open.info.log</file>
        <encoder>
            <!--日志輸出格式-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{20} -%msg%n</pattern>
        </encoder>
        <!--基于時(shí)間滾動(dòng)的日志-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--文件名的定義規(guī)則-->
            <fileNamePattern>${LOG_HOME}/auth-open.info.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--保存文件的最大記錄-->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
    </appender>
    <!--錯(cuò)誤文件的滾動(dòng)配置-->
    <appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/auth-open.error.log</file>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{20} -%msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/auth-open.error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
    </appender>

    <!--根目錄日志級別是info-->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
        <appender-ref ref="FILE-ERROR" />
    </root>

</configuration>

配置文件描述:

  • ①配置文件有變動(dòng)自動(dòng)掃描,掃描周期是60秒。
  • ②輸出的根目錄日志級別是info,日志文件配置了控制臺(tái)輸出,滾動(dòng)日志輸出,錯(cuò)誤日志輸出。
  • ③根據(jù)spring不同的激活環(huán)境,日志的輸出目錄配置為不同的值;開發(fā)環(huán)境控制臺(tái)出入的級別為info(與根目錄保持一致),線上環(huán)境和測試環(huán)境為off(不輸出日志,因?yàn)榭刂婆_(tái)輸出的日志與發(fā)布的jar包在同一目錄下,沒法進(jìn)行刪除,造成日志文件冗余)。
  • ④以日期為滾動(dòng)文件的存儲(chǔ)策略,設(shè)置日志最大存儲(chǔ)量為30,大于30時(shí),自動(dòng)刪除創(chuàng)建是時(shí)間最早的日志。

configuration

configuration是最外層的配置,在其內(nèi)包含所有的配置信息。

  • scan:當(dāng)配置文件發(fā)生變動(dòng)時(shí),是否自動(dòng)掃描配置信息,true:自動(dòng)掃描,false:不掃描。
  • scanPeriod:自動(dòng)掃描的時(shí)間周期,默認(rèn)是毫秒,當(dāng)scan為true時(shí)才有效。
  • debug:是否打印logback內(nèi)部日志信息,默認(rèn)是false。

springProfile

根據(jù)spring boot項(xiàng)目激活的文件,定義對應(yīng)的配置信息,用于區(qū)分同一變量在不同環(huán)境下的值。

  • name:用于指定激活的配置文件,例如測試環(huán)境spring.profiles.active為dev,線上環(huán)境為pro,此時(shí)可以給不同的環(huán)境下同一變量設(shè)置不同的屬性值。
  • property:定義變量,name為后續(xù)引用的名稱,value為變量的值,后續(xù)可以使用${}引用此變量。

root

root為配置文件的根節(jié)點(diǎn),可以配置日志的級別和日志輸出的引用。

  • level:日志級別。
  • appender-ref:日志追加的引用,配置ref值與appender標(biāo)簽關(guān)聯(lián)使用。

appender

定義日志追加的相關(guān)信息,name的值與appender-ref中的ref值對應(yīng)。

ConsoleAppender

控制臺(tái)輸出日志的類,存在于包c(diǎn)h.qos.logback.core.ConsoleAppender下,可以配置控制臺(tái)輸出的格式,日志級別。

RollingFileAppender

滾動(dòng)日志的類,存在于包c(diǎn)h.qos.logback.core.rolling.RollingFileAppender,可以滾動(dòng)存放日志信息。

RollingPolicy

滾動(dòng)日志的策略,可以根據(jù)時(shí)間滾動(dòng)TimeBasedRollingPolicy,時(shí)間和文件大小滾動(dòng)SizeAndTimeBasedRollingPolicy。

  • fileNamePattern:滾動(dòng)文件名的表達(dá)式。
  • maxHistory:最大歷史記錄,當(dāng)大于最大歷史記錄時(shí),會(huì)刪除創(chuàng)建時(shí)間最早的一份日志記錄

encoder

  • 把事件轉(zhuǎn)化成byte數(shù)組,并把數(shù)組輸出為文本。

pattern

  • 輸出日志的格式表達(dá)式,例:
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{20} -%msg%n</pattern>
  • %d:日期格式表達(dá)式,語法與SimpleDataFormat相同。
  • %thread:線程名。
  • %-5level:日志級別的前五位字符。
  • %logger{20}:輸出類名(從左開始縮短 ,每個(gè)層級至少保留1位),20位,例:
完整logger名 : cn.xbz.test.HelloController
%logger : cn.xbz.test.HelloController
%logger{0}: HelloController
%logger{5}: c.x.t.HelloController
%logger{20}: c.x.test.HelloController
  • msg:日志信息。

level級別

logback有5種級別,分別是Trace<Debug<Info<Warn<Error。

  • Trace:追蹤,就是程序推進(jìn)一下,你就可以寫個(gè)trace輸出。
  • Debug:指出細(xì)粒度信息事件,對調(diào)試程序非常有幫助。
  • Info:粗粒度級別上突出強(qiáng)調(diào)應(yīng)用程序的運(yùn)行過程。
  • Warn:輸出警告及warn以下級別的日志。
  • Error:輸出錯(cuò)誤信息日志。
  • Off:關(guān)閉全部日志輸出。
  • All:開啟全部日志輸出。

如果logger沒有分配日志級別,會(huì)從被分配級別最近的父類那里繼承級別,root logger默認(rèn)級別是Debug。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Kotlin基礎(chǔ)教程之控制流(順序,分支,循環(huán))

    Kotlin基礎(chǔ)教程之控制流(順序,分支,循環(huán))

    這篇文章主要介紹了Kotlin基礎(chǔ)教程之控制流的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • SpringBoot實(shí)現(xiàn)WebSocket的示例代碼

    SpringBoot實(shí)現(xiàn)WebSocket的示例代碼

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)WebSocket的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • SpringCloudStream中的消息分區(qū)數(shù)詳解

    SpringCloudStream中的消息分區(qū)數(shù)詳解

    這篇文章主要介紹了SpringCloudStream中的消息分區(qū)數(shù),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Spring-AOP自動(dòng)創(chuàng)建代理之BeanNameAutoProxyCreator實(shí)例

    Spring-AOP自動(dòng)創(chuàng)建代理之BeanNameAutoProxyCreator實(shí)例

    這篇文章主要介紹了Spring-AOP自動(dòng)創(chuàng)建代理之BeanNameAutoProxyCreator實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 配置化Feign接口動(dòng)態(tài)切換URL方式

    配置化Feign接口動(dòng)態(tài)切換URL方式

    本文介紹了在開發(fā)、測試和生產(chǎn)環(huán)境中使用Feign接口時(shí),根據(jù)不同的環(huán)境動(dòng)態(tài)切換調(diào)用URL的方法,通過在不同環(huán)境的配置文件中配置URL,并實(shí)現(xiàn)一個(gè)Feign攔截器來讀取這些配置,從而實(shí)現(xiàn)URL的動(dòng)態(tài)切換,這種方法避免了引入過多步驟,同時(shí)也保證了不同環(huán)境下的URL正確調(diào)用
    2024-11-11
  • 如何實(shí)現(xiàn)java Iterator迭代器功能

    如何實(shí)現(xiàn)java Iterator迭代器功能

    這篇文章主要介紹了如何實(shí)現(xiàn)java Iterator迭代器功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Spring @value用法示例詳解

    Spring @value用法示例詳解

    這篇文章主要介紹了Spring-@value用法詳解,為了簡化讀取properties文件中的配置值,spring支持@value注解的方式來獲取,這種方式大大簡化了項(xiàng)目配置,提高業(yè)務(wù)中的靈活性,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-08-08
  • 實(shí)例分析Java中public static void main(String args[])是什么意思

    實(shí)例分析Java中public static void main(String args[])是什么意思

    這篇文章主要介紹了實(shí)例分析Java中public static void main(String args[])的意義,詳細(xì)分析了Java主函數(shù)main關(guān)鍵字聲明的具體含義和用法,需要的朋友可以參考下
    2015-12-12
  • java web圖片上傳和文件上傳實(shí)例詳解

    java web圖片上傳和文件上傳實(shí)例詳解

    這篇文章主要介紹了java web圖片上傳和文件上傳實(shí)例詳解的相關(guān)資料,這里提供了兩種方法及示例代碼,需要的朋友可以參考下
    2016-11-11
  • 基于Feign傳輸對象無法接收參數(shù)的問題

    基于Feign傳輸對象無法接收參數(shù)的問題

    這篇文章主要介紹了基于Feign傳輸對象無法接收參數(shù)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評論