解讀:spring-boot logging。記一次Logback在spring-boot中的使用方法

有個任務停留在任務列表中好久了:使用Appenders 完成 loger4j 的日誌推送,始終沒有成功實現。追其緣由,仍然是官方的文檔沒有認真看。在spring-boot的項目中看到log4j,就想固然的認爲Spring-boot使用的是log4j,而後不假思索的去google。最終致使的就是:功能沒有實現,並且還浪費了不少沒必要要的時間,最後:仍是老老實實的回來閱讀spring-boot的官方文檔。html

本文主要對官方文檔Logging部分進行解讀。
原文地址:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html.java

若是你使用的是否是最新版本,那麼應該使用https://docs.spring.io/spring-boot/docs/版本號/reference/htmlsingle/#boot-features-logging web

如:https://docs.spring.io/spring-boot/docs/1.5.3.RELEASE/reference/htmlsingle/#boot-features-loggingspring

76 日誌

在web開中,咱們僅須要依賴於spring-boot-starter-web便自動啓用了日誌系統Logback服務器

若是僅僅是想改變日誌的等級,則能夠直接使用logging.level前綴在application.properties中進行設置,好比:app

logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR

除了控制日誌的等級外,還可使用logging.file來定義日誌輸入到的文件位置。ide

若是咱們還想配置更多選項,則能夠在classpath(resourse)中定義logback.xmllogback-spring.xmlspring-boot

76.1 配置Logback

找到logback.xmllogback-spring.xml,複製如下基本內容:ui

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <logger name="org.springframework.web" level="DEBUG"/>
</configuration>

使用ideactrl+o來打開spring-boot jar中的base.xml,咱們會看到配置信息包含一些特殊的字符,解讀以下:google

  • ${PID}當前的進程ID
  • ${LOG_FILE} 若是設置了logging.file,則使用logging.file作爲日誌輸入文件。
  • ${LOG_PATH} 同上.指定日誌輸出路徑。
  • ${LOG_EXCEPTION_CONVERSION_WORD} ..
咱們本身定義日誌輸入的方式和字符串時,固然也可使用它們了。

76.1.1 配置:將日誌僅寫入文件

若是咱們想禁用控制檯的日誌輸出(生產環境中,咱們的確是要這麼作的),而後把日誌寫入某個日誌文件的話。那麼須要新建logback-spring.xml,並引入file-appender.xml,好比:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
    <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</configuration>

而後:在application.properties定義logging.file來指定日誌文件位置.
例:

logging.file=myapplication.log

再看看上面是怎麼回事:打開org/springframework/boot/logging/logback/file-appender.xml內容以下:

<?xml version="1.0" encoding="UTF-8"?>

<!--
File appender logback configuration provided for import, equivalent to the programmatic
initialization performed by Boot
-->

<included>
    <appender name="FILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${LOG_FILE}.%i</fileNamePattern>
        </rollingPolicy>
        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>
</included>

注意:這裏面有個<appender name="FILE",指定了appender名稱爲FILE,對應logback-spring.xml的如下語句:

<root level="INFO">
    <!--日誌等級-->
        <appender-ref ref="FILE" />
        <!--指定appender爲FILE,則前面咱們剛剛找到的name值-->
    </root>

總結

有了以上內容,咱們知道了以下知識點:

  1. spring-boot默認使用的是Logback而非log4j
  2. 咱們能夠單獨創建logback-spring.xml來細化Logback的配置。
  3. Logback中,是能夠指定使用不一樣的appender來定義日誌的輸出的。
  4. 是否能夠自定義appender來達到將日誌輸出到咱們的日誌服務器,從而達到系統監控的目的呢?
相關文章
相關標籤/搜索