您好,登錄后才能下訂單哦!
這篇文章主要介紹“l(fā)ogback怎么自定義指定日志文件存儲目錄”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“l(fā)ogback怎么自定義指定日志文件存儲目錄”文章能幫助大家解決問題。
定義一個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.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繼承自log4j,它是spring boot默認的日志集成框架,官網(wǎng)地址:https://logback.qos.ch/
當我們啟動spring boot項目的時候,沒有進行任何日志的配置,控制臺能輸出日志,原因是spring boot內(nèi)置了org.springframework.boot.logging.logback日志,里面配置了base.xml文件,引入了基礎(chǔ)的日志輸出格式。
當我們項目部署到服務(wù)器后,會在與jar同級的目錄下生成一個默認日志文件,文件名為jar包的名稱。
默認的日志文件,生成的日志格式配置不是我們所希望的,默認日志輸出格式:
此時我們可以自定義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è)資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發(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)容。