溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

logback怎么自定義指定日志文件存儲目錄

發(fā)布時間:2023-03-10 10:30:08 來源:億速云 閱讀:199 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“l(fā)ogback怎么自定義指定日志文件存儲目錄”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“l(fā)ogback怎么自定義指定日志文件存儲目錄”文章能幫助大家解決問題。

    logback自定義指定日志文件存儲目錄

    1、正常使用

    定義一個logback.xml配置文件即可:

    <?xml version="1.0" encoding="UTF-8" ?>
     
    <configuration>
     
        <!-- 指定日志文件路徑(與當前程序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>
            <!--滾動策略-->
            <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>
            <!--滾動策略-->
            <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、自定義指定日志文件存儲目錄

    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 {
     
        /** 存儲日志路徑標識 */
        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"是指用戶當前工作目錄
            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>
            <!--滾動策略-->
            <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>
            <!--滾動策略-->
            <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默認的日志集成框架,官網(wǎng)地址:https://logback.qos.ch/

    spring boot默認日志框架

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

    logback怎么自定義指定日志文件存儲目錄

    當我們項目部署到服務(wù)器后,會在與jar同級的目錄下生成一個默認日志文件,文件名為jar包的名稱。

    logback怎么自定義指定日志文件存儲目錄

    自定義logback配置文件

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

    logback怎么自定義指定日志文件存儲目錄

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

    logging:
      config: classpath:logback-xxx.xml

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

    配置文件說明

    先來看一個完整的配置文件:

    <?xml version="1.0" encoding="utf-8" ?>
    <!--自動掃描配置文件,間隔周期是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)境,控制臺輸出的日志級別-->
            <property name="CONSOLE_LEVEL" value="INFO" />
        </springProfile>
        <springProfile name="dev">
            <!--dev環(huán)境,日志的存放位置-->
            <property name="LOG_HOME" value="/u01/logs/xxx" />
            <!--pro環(huán)境,控制臺輸出的日志級別-->
            <property name="CONSOLE_LEVEL" value="OFF" />
        </springProfile>
        <springProfile name="pro">
            <!--pro環(huán)境,日志的存放位置-->
            <property name="LOG_HOME" value="/u01/logs/xxx" />
            <!--pro環(huán)境,控制臺輸出的日志級別-->
            <property name="CONSOLE_LEVEL" value="OFF" />
        </springProfile>
        <!--日志存放最大數(shù)量-->
        <property name="maxHistory" value="30"/>
    
        <!--定義控制臺輸出的日志信息-->
        <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>
        
        <!--定義滾動日志-->
        <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>
            <!--基于時間滾動的日志-->
            <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>
        <!--錯誤文件的滾動配置-->
        <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>

    配置文件描述:

    • ①配置文件有變動自動掃描,掃描周期是60秒。

    • ②輸出的根目錄日志級別是info,日志文件配置了控制臺輸出,滾動日志輸出,錯誤日志輸出。

    • ③根據(jù)spring不同的激活環(huán)境,日志的輸出目錄配置為不同的值;開發(fā)環(huán)境控制臺出入的級別為info(與根目錄保持一致),線上環(huán)境和測試環(huán)境為off(不輸出日志,因為控制臺輸出的日志與發(fā)布的jar包在同一目錄下,沒法進行刪除,造成日志文件冗余)。

    • ④以日期為滾動文件的存儲策略,設(shè)置日志最大存儲量為30,大于30時,自動刪除創(chuàng)建是時間最早的日志。

    configuration

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

    • scan:當配置文件發(fā)生變動時,是否自動掃描配置信息,true:自動掃描,false:不掃描。

    • scanPeriod:自動掃描的時間周期,默認是毫秒,當scan為true時才有效。

    • debug:是否打印logback內(nèi)部日志信息,默認是false。

    springProfile

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

    • name:用于指定激活的配置文件,例如測試環(huán)境spring.profiles.active為dev,線上環(huán)境為pro,此時可以給不同的環(huán)境下同一變量設(shè)置不同的屬性值。

    • property:定義變量,name為后續(xù)引用的名稱,value為變量的值,后續(xù)可以使用${}引用此變量。

    root

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

    • level:日志級別。

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

    appender

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

    ConsoleAppender

    控制臺輸出日志的類,存在于包ch.qos.logback.core.ConsoleAppender下,可以配置控制臺輸出的格式,日志級別。

    RollingFileAppender

    滾動日志的類,存在于包ch.qos.logback.core.rolling.RollingFileAppender,可以滾動存放日志信息。

    RollingPolicy

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

    • fileNamePattern:滾動文件名的表達式。

    • maxHistory:最大歷史記錄,當大于最大歷史記錄時,會刪除創(chuàng)建時間最早的一份日志記錄

    encoder

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

    pattern

    • 輸出日志的格式表達式,例:

    <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{20} -%msg%n</pattern>
    • %d:日期格式表達式,語法與SimpleDataFormat相同。

    • %thread:線程名。

    • %-5level:日志級別的前五位字符。

    • %logger{20}:輸出類名(從左開始縮短 ,每個層級至少保留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:追蹤,就是程序推進一下,你就可以寫個trace輸出。

    • Debug:指出細粒度信息事件,對調(diào)試程序非常有幫助。

    • Info:粗粒度級別上突出強調(diào)應(yīng)用程序的運行過程。

    • Warn:輸出警告及warn以下級別的日志。

    • Error:輸出錯誤信息日志。

    • Off:關(guān)閉全部日志輸出。

    • All:開啟全部日志輸出。

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

    關(guān)于“l(fā)ogback怎么自定義指定日志文件存儲目錄”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI