您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)logback如何配置中變量和include,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
logback配置在實(shí)際應(yīng)用中往往會(huì)遇到appender的配置中存在大量的重復(fù)內(nèi)容,但是logback又不像編程語(yǔ)言一樣支持繼承,采用include和變量結(jié)合可以一定程度上解決這個(gè)問(wèn)題。
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name=WarnLogFile"> <encoder> <charset>UTF-8</charset> <pattern>%d{dd.MMM.yyyy HH:mm:ss.SSS z}, [%6t], %6p, %C:%M %m%n</pattern> </encoder> <file>${LOGS_DIR}/warn.log</file> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>40MB</maxFileSize> </triggeringPolicy> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${LOGS_DIR}/warn%i.log.gz</fileNamePattern> <minIndex>1</minIndex> <maxIndex>21</maxIndex> </rollingPolicy> </appender> <appender class="ch.qos.logback.classic.AsyncAppender" name="Warn"> <queueSize>2048</queueSize> <includeCallerData>true</includeCallerData> <discardingThreshold>0</discardingThreshold> <appender-ref ref="WarnLogFile" /> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> </appender> <appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="InfoLogFile"> <encoder> <charset>UTF-8</charset> <pattern>%d{dd.MMM.yyyy HH:mm:ss.SSS z}, [%6t], %6p, %C:%M %m%n</pattern> </encoder> <file>${LOGS_DIR}/info.log</file> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>10MB</maxFileSize> </triggeringPolicy> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${LOGS_DIR}/info%i.log.gz</fileNamePattern> <minIndex>1</minIndex> <maxIndex>21</maxIndex> </rollingPolicy> </appender> <appender class="ch.qos.logback.classic.AsyncAppender" name="info"> <queueSize>2048</queueSize> <includeCallerData>true</includeCallerData> <discardingThreshold>0</discardingThreshold> <appender-ref ref="infoLogFile" /> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> </appender> <appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="DebugLogFile"> <encoder> <charset>UTF-8</charset> <pattern>%d{dd.MMM.yyyy HH:mm:ss.SSS z}, [%6t], %6p, %C:%M %m%n</pattern> </encoder> <file>${LOGS_DIR}/debug.log</file> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>5MB</maxFileSize> </triggeringPolicy> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${LOGS_DIR}/debug%i.log.gz</fileNamePattern> <minIndex>1</minIndex> <maxIndex>21</maxIndex> </rollingPolicy> </appender> <appender class="ch.qos.logback.classic.AsyncAppender" name="Debug"> <queueSize>2048</queueSize> <includeCallerData>true</includeCallerData> <discardingThreshold>0</discardingThreshold> <appender-ref ref="DebugLogFile" /> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> </appender>
可以看到以上的三個(gè)定義存在大量的重復(fù)內(nèi)容會(huì)導(dǎo)致logback文件很大,不容易維護(hù),結(jié)合變量和include則可以一定程度上解決這個(gè)問(wèn)題。
把不同的內(nèi)容用變量定義:
<included> <appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="${FILE_APPENDER}"> <encoder> <charset>UTF-8</charset> <pattern>%d{dd.MMM.yyyy HH:mm:ss.SSS z}, [%6t], %6p, %C:%M %m%n</pattern> </encoder> <file>${LOGS_DIR}/${LOGFILE}.log</file> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>5MB</maxFileSize> </triggeringPolicy> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${LOGS_DIR}/${LOGFILE}%i.log.gz</fileNamePattern> <minIndex>1</minIndex> <maxIndex>21</maxIndex> </rollingPolicy> </appender> <appender class="ch.qos.logback.classic.AsyncAppender" name="${ASYNC_APPENDER}"> <queueSize>2048</queueSize> <includeCallerData>true</includeCallerData> <discardingThreshold>0</discardingThreshold> <appender-ref ref="${FILE_APPENDER}" /> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>${LOG_LEVEL}</level> </filter> </appender> </included>
warn.xml:
<included> <property scope="local" name="LOGFILE" value="warn" /> <property scope="local" name="FILE_APPENDER" value="WarnLogFile" /> <property scope="local" name="ASYNC_APPENDER" value="warn" /> <property scope="local" name="LOG_LEVEL" value="WARN" /> <include file="${LOGS_CUSTOM_DIR}/default.xml"/> </included>
info.xml:
<included> <property scope="local" name="LOGFILE" value="info" /> <property scope="local" name="FILE_APPENDER" value="InfoLogFile" /> <property scope="local" name="ASYNC_APPENDER" value="info" /> <property scope="local" name="LOG_LEVEL" value="INFO" /> <include file="${LOGS_CUSTOM_DIR}/default.xml"/> </included>
debug.xml:
<included> <property scope="local" name="LOGFILE" value="debug" /> <property scope="local" name="FILE_APPENDER" value="DebugLogFile" /> <property scope="local" name="ASYNC_APPENDER" value="debug" /> <property scope="local" name="LOG_LEVEL" value="DEBUG" /> <include file="${LOGS_CUSTOM_DIR}/default.xml"/> </included>
<include file="${LOGS_CUSTOM_DIR}/warn.xml"/> <include file="${LOGS_CUSTOM_DIR}/info.xml"/> <include file="${LOGS_CUSTOM_DIR}/debug.xml"/> <root level="DEBUG"> ... <appender-ref ref="warn"/> <appender-ref ref="info"/> <appender-ref ref="debug"/> </root>
下面的這個(gè)配置文件的意思是定義了兩個(gè)appender,這兩個(gè)appender中名為ASYNC-LOG的appender是將com.xx.cloud.trail.client.async路徑下面產(chǎn)生的級(jí)別為error的日志進(jìn)行收集,保存在定義的文件夾下面,另一個(gè)appender同理,如果這個(gè)logback.xml文件想在其他的項(xiàng)目中被引用那么就需要用在iucluded標(biāo)簽將定義的appender跟logger包圍起來(lái),表示這個(gè)是可以被導(dǎo)入其他項(xiàng)目的
<?xml version="1.0" encoding="UTF-8"?> <included> <appender name="ASYNC_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件輸出的文件名--> <FileNamePattern>/var/log/xx/cloud/trail/async/error.log.%d{yyyy-MM-dd}.log</FileNamePattern> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <!-- 日志輸出編碼 --> <layout class="ch.qos.logback.classic.PatternLayout"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n </pattern> </layout> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <appender name="AOP_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件輸出的文件名--> <FileNamePattern>/var/log/xx/cloud/trail/aop/error.log.%d{yyyy-MM-dd}.log</FileNamePattern> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <!-- 日志輸出編碼 --> <layout class="ch.qos.logback.classic.PatternLayout"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n </pattern> </layout> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!--需要將日志單獨(dú)輸出的包路徑--> <logger name="com.xx.cloud.trail.client.async" level="ERROR" additivity="false"> <appender-ref ref="ASYNC_LOG"/> </logger> <!--需要將日志單獨(dú)輸出的包路徑--> <logger name="com.xx.cloud.trail.client.aop" level="ERROR" additivity="false"> <appender-ref ref="AOP_LOG"/> </logger> </included>
假如1中的配置logback.xml文件的名稱(chēng)為logback-trail.xml,那么需要在其他的項(xiàng)目的logback.xml文件中加入一句
表示導(dǎo)入其他項(xiàng)目的logback文件,這樣就能將其他項(xiàng)目中的配置文件進(jìn)行導(dǎo)入
<?xml version="1.0" encoding="UTF-8"?> <!-- scan: 當(dāng)此屬性設(shè)置為true時(shí),配置文件如果發(fā)生改變,將會(huì)被重新加載,默認(rèn)值為true。 scanPeriod: 設(shè)置監(jiān)測(cè)配置文件是否有修改的時(shí)間間隔,如果沒(méi)有給出時(shí)間單位,默認(rèn)單位是毫秒。當(dāng)scan為true時(shí),此屬性生效。默認(rèn)的時(shí)間間隔為1分鐘。 debug: 當(dāng)此屬性設(shè)置為true時(shí),將打印出logback內(nèi)部日志信息,實(shí)時(shí)查看logback運(yùn)行狀態(tài)。默認(rèn)值為false。 --> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <include resource="logback-trail.xml"/> <!--配置日志輸出到的路徑--> <springProperty scop="context" name="logging.path" source="logging.path" defaultValue="logging-path-not-find"/> <property name="log.path" value="${logging.path}"/> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> </encoder> </appender> <appender name="TRAIL_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件輸出的文件名--> <FileNamePattern>${logging.path}/trail/trail.log.%d{yyyy-MM-dd}.log</FileNamePattern> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <!-- 日志輸出編碼 --> <layout class="ch.qos.logback.classic.PatternLayout"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n </pattern> </layout> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 日志輸出級(jí)別 --> <root level="DEBUG"> <appender-ref ref="STDOUT"/> <appender-ref ref="TRAIL_LOG"/> </root> </configuration>
關(guān)于“l(fā)ogback如何配置中變量和include”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。