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

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

 更新時(shí)間:2023年03月10日 09:51:23   作者:cwh056056  
這篇文章主要介紹了logback之自定義指定日志文件存儲(chǔ)目錄方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(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> ? <!--過(guò)濾掉error的級(jí)別-->
? ? ? ? ? ? <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> ? <!--過(guò)濾掉error的級(jí)別-->
? ? ? ? ? ? <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} 為我們?cè)诒O(jiān)聽器中定義的 key 值

logback基本配置說(shuō)明

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í)候,沒(méi)有進(jìn)行任何日志的配置,控制臺(tái)能輸出日志,原因是spring boot內(nèi)置了org.springframework.boot.logging.logback日志,里面配置了base.xml文件,引入了基礎(chǔ)的日志輸出格式。

當(dāng)我們項(xiàng)目部署到服務(wù)器后,會(huì)在與jar同級(jí)的目錄下生成一個(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之下。

配置文件說(shuō)明

先來(lái)看一個(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)輸出的日志級(jí)別-->
        <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)輸出的日志級(jí)別-->
        <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)輸出的日志級(jí)別-->
        <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>
        <!--過(guò)濾輸出的日志-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!--定義日志的級(jí)別,大于此級(jí)別才輸出日志-->
            <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>

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

</configuration>

配置文件描述:

  • ①配置文件有變動(dòng)自動(dòng)掃描,掃描周期是60秒。
  • ②輸出的根目錄日志級(jí)別是info,日志文件配置了控制臺(tái)輸出,滾動(dòng)日志輸出,錯(cuò)誤日志輸出。
  • ③根據(jù)spring不同的激活環(huán)境,日志的輸出目錄配置為不同的值;開發(fā)環(huán)境控制臺(tái)出入的級(jí)別為info(與根目錄保持一致),線上環(huán)境和測(cè)試環(huán)境為off(不輸出日志,因?yàn)榭刂婆_(tái)輸出的日志與發(fā)布的jar包在同一目錄下,沒(méi)法進(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)目激活的文件,定義對(duì)應(yīng)的配置信息,用于區(qū)分同一變量在不同環(huán)境下的值。

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

root

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

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

appender

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

ConsoleAppender

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

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á)式,語(yǔ)法與SimpleDataFormat相同。
  • %thread:線程名。
  • %-5level:日志級(jí)別的前五位字符。
  • %logger{20}:輸出類名(從左開始縮短 ,每個(gè)層級(jí)至少保留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級(jí)別

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

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

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

總結(jié)

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

相關(guān)文章

  • 使用Shiro實(shí)現(xiàn)登錄成功后跳轉(zhuǎn)到之前的頁(yè)面

    使用Shiro實(shí)現(xiàn)登錄成功后跳轉(zhuǎn)到之前的頁(yè)面

    這篇文章主要介紹了如何使用Shiro實(shí)現(xiàn)不同用戶登錄成功后跳轉(zhuǎn)到不同主頁(yè),實(shí)現(xiàn)此功能目前比較好的方法是用ajax的方法登錄,第二種方法是把用戶未登錄前的url存在session中,需要的朋友可以參考下
    2015-07-07
  • Rocketmq事務(wù)消息之半消息詳解

    Rocketmq事務(wù)消息之半消息詳解

    這篇文章主要介紹了Rocketmq事務(wù)消息之半消息詳解,RocketMQ的事務(wù)消息支持在業(yè)務(wù)邏輯與發(fā)送消息之間提供事務(wù)保證,RocketMQ通過(guò)兩階段的方式提供事務(wù)消息的支持,需要的朋友可以參考下
    2023-09-09
  • 深入探討Java內(nèi)存區(qū)域

    深入探討Java內(nèi)存區(qū)域

    本篇文章對(duì)Java內(nèi)存區(qū)域的使用進(jìn)行了詳細(xì)的介紹,內(nèi)容很全面,需要的朋友可以參考下
    2015-07-07
  • JAVA?DOC如何生成標(biāo)準(zhǔn)的JAVA?API文檔詳解

    JAVA?DOC如何生成標(biāo)準(zhǔn)的JAVA?API文檔詳解

    這篇文章主要給大家介紹了關(guān)于JAVA?DOC如何生成標(biāo)準(zhǔn)的JAVA?API文檔的相關(guān)資料,Javadoc是Sun公司提供的一種工具,它可以從程序源代碼中抽取類、方法、成員等注釋,然后形成一個(gè)和源代碼配套的API幫助文檔,需要的朋友可以參考下
    2024-06-06
  • MyBatis與其使用方法示例詳解

    MyBatis與其使用方法示例詳解

    MyBatis是一個(gè)支持自定義SQL的持久層框架,通過(guò)XML文件實(shí)現(xiàn)SQL配置和數(shù)據(jù)映射,簡(jiǎn)化了JDBC代碼的編寫,本文給大家介紹MyBatis與其使用方法講解,感興趣的朋友一起看看吧
    2025-03-03
  • java中線程池的關(guān)閉問(wèn)題

    java中線程池的關(guān)閉問(wèn)題

    這篇文章主要介紹了java中線程池的關(guān)閉問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • SpringBoot之多環(huán)境打包與配置文件排除方式

    SpringBoot之多環(huán)境打包與配置文件排除方式

    這篇文章主要介紹了SpringBoot之多環(huán)境打包與配置文件排除方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Mybatis單個(gè)參數(shù)的if判斷報(bào)異常There is no getter for property named ''xxx'' in ''class java.lang.Integer''的解決方案

    Mybatis單個(gè)參數(shù)的if判斷報(bào)異常There is no getter for property named ''x

    今天小編就為大家分享一篇關(guān)于Mybatis單個(gè)參數(shù)的if判斷報(bào)異常There is no getter for property named 'xxx' in 'class java.lang.Integer'的解決方案,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 詳解springcloud組件consul服務(wù)治理

    詳解springcloud組件consul服務(wù)治理

    Consul是一款由HashiCorp公司開源的,用于服務(wù)治理的軟件,Spring Cloud Consul對(duì)其進(jìn)行了封裝,這篇文章主要介紹了springcloud組件consul服務(wù)治理,需要的朋友可以參考下
    2022-08-08
  • spring?controller層引用service報(bào)空指針異常nullpointExceptio問(wèn)題

    spring?controller層引用service報(bào)空指針異常nullpointExceptio問(wèn)題

    這篇文章主要介紹了spring?controller層引用service報(bào)空指針異常nullpointExceptio問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評(píng)論

怀柔区| 五家渠市| 潞西市| 铁岭县| 綦江县| 柘城县| 柞水县| 拉孜县| 安义县| 阳朔县| 孝昌县| 林州市| 吉安市| 清水河县| 萝北县| 本溪| 恭城| 平罗县| 且末县| 左贡县| 丹江口市| 汶川县| 平顶山市| 芜湖县| 深泽县| 乌兰察布市| 盐源县| 赤城县| 荥经县| 长岛县| 宁夏| 修文县| 江城| 揭西县| 牙克石市| 个旧市| 观塘区| 元氏县| 淮北市| 开阳县| 习水县|