LogBack

首先談到日誌,咱們可能聽過log4j logback slf4j這三個名詞,那麼它們之間的關係是怎麼樣的呢?SLF4J,即簡單日誌門面(Simple Logging Facade for JAVA),不是具體的日誌解決方案,它只服務於各類各樣的日誌系統。通常來講,slf4j配合log4j、logback進行使用,能夠理解爲slf4j是標準,log4j和logback是實現.spring

此次講下logback-spring.xml的配置app

Appender異步

Logback將執行日誌事件輸出的組件稱爲Appender
實現的Appender必須繼承 ch.qos.logback.core.Appender接口,這個接口有一個doAppender方法
Appender最終都會負責輸出日誌,可是他們也可能將日誌格式化的工做交給Layout,或者Encoder對象。
logback-spring.xml中有許多的appender,這裏咱們挑幾個項目中用的講下
ConsoleAppenderide

顧名思義這個是打印到控制檯的appender
AsyncAppenderui

AsyncAppender記錄ILoggingEvents的方式是異步的。它僅僅至關於一個event分配器,所以須要配合其餘appender纔能有所做爲。日誌

RollingFileAppendercode

RollingFileAppender繼承自FileAppender,提供日誌目標文件自動切換的功能。例如能夠用日期做爲日誌分割的條件。
RollingFileAppender有兩個重要屬性,RollingPolicy負責怎麼切換日誌,TriggeringPolicy負責什麼時候切換.
爲了使RollingFileAppender起做用,這兩個屬性必須設置,可是若是RollingPolicy的實現類一樣實現了TriggeringPolicy接口,則也能夠只設置RollingPolicy這個屬性。xml

RollingPolicy對象

負責日誌文件的切換以及重命名
TimeBasedRollingPolicy:日誌滾動策略基於時間的,例如根據天數,月份繼承

SentryAppender

經過Raven上報的sentry

@Override
    protected void append(ILoggingEvent iLoggingEvent) {
        // Do not log the event if the current thread is managed by raven
        if (RavenEnvironment.isManagingThread())
            return;

        RavenEnvironment.startManagingThread();
        try {
            if (raven == null)
                initRaven();

            if (minLevel != null && !iLoggingEvent.getLevel().isGreaterOrEqual(minLevel))
                return;

            Event event = buildEvent(iLoggingEvent);
            raven.sendEvent(event);
        } catch (Exception e) {
            addError("An exception occurred while creating a new event in Raven", e);
        } finally {
            RavenEnvironment.stopManagingThread();
        }
    }

AmqpAppender

將日誌發送到mq中,再由消費者推送到Logstash
啓用Appender
appender-ref 表示啓用哪些appender

<!-- root級別 DEBUG -->
    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="ASYNC_DEFAULT" />
        <if condition='property("sentryEnable").contains("true")'>
            <then>
                <appender-ref ref="Sentry" />
            </then>
        </if>
        <if condition='property("elkEnable").contains("true")'>
            <then>
                <appender-ref ref="ELK" />
            </then>
        </if>
    </root>

LayoutBase
Layout是logback中負責把日誌事件轉換成成字符串的組件,能夠理解爲日誌中須要哪些字段,能夠經過layout來作.
能夠自定義本身的layout

​​
doLayout
主要負責組裝須要上報的信息,好比一些自定義的requestId,reqKey 等

繼承LayoutBase<ILoggingEvent>重寫doLayout方法

相關文章
相關標籤/搜索