日志框架 - 基于spring-boot - 實(shí)現(xiàn)1 - 配置文件

日志框架系列講解文章
日志框架 - 基于spring-boot - 使用入門(mén)
日志框架 - 基于spring-boot - 設(shè)計(jì)
日志框架 - 基于spring-boot - 實(shí)現(xiàn)1 - 配置文件
日志框架 - 基于spring-boot - 實(shí)現(xiàn)2 - 消息定義及消息日志打印
日志框架 - 基于spring-boot - 實(shí)現(xiàn)3 - 關(guān)鍵字與三種消息解析器
日志框架 - 基于spring-boot - 實(shí)現(xiàn)4 - HTTP請(qǐng)求攔截
日志框架 - 基于spring-boot - 實(shí)現(xiàn)5 - 線(xiàn)程切換
日志框架 - 基于spring-boot - 實(shí)現(xiàn)6 - 自動(dòng)裝配

上一篇我們講解了日志框架的總體設(shè)計(jì)
本篇講日志框架實(shí)現(xiàn)的第一部分:配置文件

Spring Boot默認(rèn)日志框架是logback,實(shí)現(xiàn)日志框架需要自定義logback的配置鲤脏,根據(jù)官方文檔的指引大咱,在classpath目錄下新增文件名為logback-spring.xml的配置文件。文件內(nèi)容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <!--第1步. 引入spring-boot提供的默認(rèn)格式配置-->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <!--第2步.定義從application.properties引入的配置-->  
    <!--spring-boot logging.path-->
    <property name="LOG_PATH" value="${LOG_PATH:-./logs}"/>
    <!--spring-boot logging.file-->
    <property name="LOG_FILE"
              value="${LOG_PATH}/${LOG_FILE:-spring.log}"/>
    <springProperty scope="context" name="ROOT_PACKAGE"
                    source="xpay.framework.logging.package.root"
                    defaultValue="com"/>
    <springProperty scope="context" name="LOG_TO_CONSOLE"
                    source="xpay.framework.logging.log-to-console"
                    defaultValue="false"/>
    <!--message log patterns-->
    <springProperty scope="context" name="MESSAGE_FILENAME_PATTERN"
                    source="xpay.framework.logging.logback.message.filename.pattern"
                    defaultValue="%d{yyyy-MM-dd}/message.log.%d{yyyy-MM-dd}"/>
    <springProperty scope="context" name="MESSAGE_ENCODER_PATTERN"
                    source="xpay.framework.logging.logback.message.encoder.pattern"
                    defaultValue="%d{yyyy-MM-dd HH:mm:ss.SSS} %msg%n"/>
    <springProperty scope="context" name="MESSAGE_MAX_FILE_SIZE"
                    source="xpay.framework.logging.logback.message.max-file-size"
                    defaultValue="200MB"/>
    <!--system log patterns-->
    <springProperty scope="context" name="SYSTEM_FILENAME_PATTERN"
                    source="xpay.framework.logging.logback.system.filename.pattern"
                    defaultValue="%d{yyyy-MM-dd}/info.log.%d{yyyy-MM-dd}"/>
    <springProperty scope="context" name="SYSTEM_ENCODER_PATTERN"
                    source="xpay.framework.logging.logback.system.encoder.pattern"
                    defaultValue="${FILE_LOG_PATTERN}"/>
    <springProperty scope="context" name="SYSTEM_MAX_FILE_SIZE"
                    source="xpay.framework.logging.logback.system.max-file-size"
                    defaultValue="200MB"/>
    <!--alarm log patterns-->
    <springProperty scope="context" name="ALARM_FILENAME_PATTERN"
                    source="xpay.framework.logging.logback.alarm.filename.pattern"
                    defaultValue="alarm/alarm.log.%d{yyyy-MM-dd}"/>
    <springProperty scope="context" name="ALARM_ENCODER_PATTERN"
                    source="xpay.framework.logging.logback.alarm.encoder.pattern"
                    defaultValue="${FILE_LOG_PATTERN}"/>
    <!--第3步. 引入spring-boot提供的默認(rèn)文件配置-->
    <include
            resource="org/springframework/boot/logging/logback/console-appender.xml"/>
    <include
            resource="org/springframework/boot/logging/logback/file-appender.xml"/>

    <!--第4步. 定義三種日志 Appender-->
    <!-- 處理消息日志 -->
    <appender name="MESSAGE_APPENDER"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${MESSAGE_FILENAME_PATTERN}.%i
            </fileNamePattern>
            <maxFileSize>${MESSAGE_MAX_FILE_SIZE}</maxFileSize>
        </rollingPolicy>
        <encoder>
            <outputPatternAsHeader>true</outputPatternAsHeader>
            <charset>utf8</charset>
            <pattern>${MESSAGE_ENCODER_PATTERN}</pattern>
        </encoder>
    </appender>
    <appender name="ASYNC_MESSAGE_APPENDER"
              class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <!--以每個(gè)日志內(nèi)容2KB大小計(jì)算烛占,最大緩存10MB的日志。-->
        <queueSize>5000</queueSize>
        <!--單位為毫秒-->
        <maxFlushTime>1000</maxFlushTime>
        <appender-ref ref="MESSAGE_APPENDER"/>
    </appender>
    <!-- 系統(tǒng)運(yùn)行日志 -->
    <appender name="SYSTEM_APPENDER"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${SYSTEM_FILENAME_PATTERN}.%i
            </fileNamePattern>
            <maxFileSize>${SYSTEM_MAX_FILE_SIZE}</maxFileSize>
        </rollingPolicy>
        <encoder>
            <outputPatternAsHeader>true</outputPatternAsHeader>
            <charset>utf8</charset>
            <pattern>${SYSTEM_ENCODER_PATTERN}</pattern>
        </encoder>
    </appender>
    <appender name="ASYNC_SYSTEM_APPENDER"
              class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <!--以每個(gè)日志內(nèi)容0.5KB大小為基礎(chǔ),大約允許緩存10MB的日志涮母。-->
        <queueSize>20000</queueSize>
        <!--單位為毫秒-->
        <maxFlushTime>1000</maxFlushTime>
        <appender-ref ref="SYSTEM_APPENDER"/>
    </appender>
    <!-- 告警日志記錄 -->
    <appender name="ALARM_APPENDER"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!--deny all events with a level below this level-->
            <level>WARN</level>
        </filter>
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${ALARM_FILENAME_PATTERN}
            </fileNamePattern>
        </rollingPolicy>
        <encoder>
            <outputPatternAsHeader>true</outputPatternAsHeader>
            <charset>utf8</charset>
            <pattern>${ALARM_ENCODER_PATTERN}</pattern>
        </encoder>
    </appender>
    <appender name="ASYNC_ALARM_APPENDER"
              class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <!--以每個(gè)日志內(nèi)容0.5KB大小為基礎(chǔ)谆趾,大約允許緩存1MB的日志。-->
        <queueSize>2000</queueSize>
        <!--單位為毫秒 -->
        <maxFlushTime>500</maxFlushTime>
        <appender-ref ref="ALARM_APPENDER"/>
    </appender>


    <!--第5步. 定義默認(rèn)的logger 與appender 的對(duì)應(yīng)關(guān)第-->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="ASYNC_SYSTEM_APPENDER"/>
        <appender-ref ref="ASYNC_ALARM_APPENDER"/>
    </root>
    <if condition='property("LOG_TO_CONSOLE").contains("true")'>
        <then>
            <logger name="${ROOT_PACKAGE}" level="INFO" additivity="true">
                <appender-ref ref="ASYNC_ALARM_APPENDER"/>
                <appender-ref ref="ASYNC_SYSTEM_APPENDER"/>
            </logger>
        </then>
        <else>
            <logger name="${ROOT_PACKAGE}" level="INFO" additivity="false">
                <appender-ref ref="ASYNC_ALARM_APPENDER"/>
                <appender-ref ref="ASYNC_SYSTEM_APPENDER"/>
            </logger>
        </else>
    </if>
    <logger name="com.cmsz.framework.logging.aop.MessageToLogAspect"
            level="INFO" additivity="true">
        <appender-ref ref="ASYNC_MESSAGE_APPENDER"/>
    </logger>
</configuration>

如上文件所示叛本,配置文件包含幾個(gè)部分:

  1. 引入配置文件Spring Boot在org.springframework.boot.logging.logback包中提供了4個(gè)默認(rèn)的logback配置文件沪蓬,分別是base.xml,console-appender.xml来候,defaults.xml跷叉,file-appender.xml,本配置文件里在第1步與第3步中分別引入营搅。
  2. 定義配置項(xiàng):為了在Spring Boot的配置文件(如application.properties文件)中能配置日志文件名及日志打印格式云挟,第2步定義了許多與Spring配置項(xiàng)對(duì)應(yīng)的屬性(property
    3.定義Appender: 第4步分別為三種日志(系統(tǒng)運(yùn)行日志,消息日志與告警日志)定義輸出文件及格式转质,并使用異步的Appender避免I/O成為系統(tǒng)性能開(kāi)銷(xiāo)的瓶頸园欣。
  3. 定義Logger:第5步定義默認(rèn)的logger,與對(duì)應(yīng)的日志級(jí)別峭拘。

至此俊庇,logback的配置基本完成。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸡挠,一起剝皮案震驚了整個(gè)濱河市辉饱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拣展,老刑警劉巖彭沼,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異备埃,居然都是意外死亡姓惑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)按脚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)于毙,“玉大人,你說(shuō)我怎么就攤上這事辅搬∥ň冢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵堪遂,是天一觀(guān)的道長(zhǎng)介蛉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)溶褪,這世上最難降的妖魔是什么币旧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮猿妈,結(jié)果婚禮上吹菱,老公的妹妹穿的比我還像新娘巍虫。我一直安慰自己,他們只是感情好鳍刷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布垫言。 她就那樣靜靜地躺著,像睡著了一般倾剿。 火紅的嫁衣襯著肌膚如雪筷频。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天前痘,我揣著相機(jī)與錄音凛捏,去河邊找鬼。 笑死芹缔,一個(gè)胖子當(dāng)著我的面吹牛坯癣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播最欠,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼示罗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了芝硬?” 一聲冷哼從身側(cè)響起蚜点,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拌阴,沒(méi)想到半個(gè)月后绍绘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迟赃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年陪拘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纤壁。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡左刽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出酌媒,到底是詐尸還是另有隱情欠痴,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布馍佑,位于F島的核電站斋否,受9級(jí)特大地震影響梨水,放射性物質(zhì)發(fā)生泄漏拭荤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一疫诽、第九天 我趴在偏房一處隱蔽的房頂上張望舅世。 院中可真熱鬧旦委,春花似錦、人聲如沸雏亚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)罢低。三九已至查辩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間网持,已是汗流浹背宜岛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留功舀,地道東北人萍倡。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像辟汰,于是被迫代替她去往敵國(guó)和親列敲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容