logback實踐總結

logback的日誌滾動策略實踐總結:
1、如果日誌打印的多的話,很容易佔滿磁盤,引起宕機。所以要配置日誌滾動策略rollingPolicy,設置最大文件容量,超過最大值,再下一次產生新文件的時候,自動清空最早的文件。
2、假設某logger對應路徑的日誌每天有1G,可以分配給該logger的最大空間是20G,可以使用rollingPolicy的TimeBasedRollingPolicy策略,每週生成一個文件,當第3周結束,日誌大小爲21G,超過最大限制,會自動刪除第1周的文件,再創建第4周的日誌文件。如下:

	<appender name="LOGGER-INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>D://export//Logs//test.com.local/info.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>D://export//Logs//test.com.local/info.log.%d{yyyy-w}</fileNamePattern>
			<maxHistory>4</maxHistory>
			<totalSizeCap>20G</totalSizeCap>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%p] - %m%n</pattern>
		</encoder>
	</appender>

3、上面的配置有缺陷,如果第3周發生日誌突增的情況,還沒到第3周結束,不會自動的清理前面的日誌,本週的日誌持續增加會超過最大限制,或打滿磁盤,引起事故。
4、如果日誌量較大,或者打印日誌的量不平均,可以使用rollingPolicy的FixedWindowRollingPolicy策略,存儲10個(默認20個)文件,配合triggeringPolicy觸發策略,設置每個文件最大的容量1G。這樣,當文件達到最大容量,會自身產生一個新文件,如果文件的個數達到10個,會先刪除最早的文件。這樣可以控制日誌的總量不超過設置的最大限制,不會引起佔用磁盤過多或打滿的問題。如下:

    <appender name="LOGGER-INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>D://export//Logs//test.com.local/info.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>D://export//Logs//test.com.local/info-%i.log</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>10</maxIndex>
        </rollingPolicy>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>1G</maxFileSize>
        </triggeringPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%p] - %m%n</pattern>
        </encoder>
    </appender>

http://www.logback.cn/

logback新認識https://blog.csdn.net/millery22/article/details/86672284#commentBox

logback的主要組成部分

  • appender,是用來定義一個寫日誌記錄的組件,常用的appender類有ConsoleAppender和RollingFileAppender,前者個是用來在控制檯上打印日誌,後者是將日誌輸出到文件中。
  • layout,是指定日誌的佈局方式,這個基本都不會去特殊的指定,可以忽略,知道有這個東西即可。
  • encoder,負責把事件轉換成字節數組並把字節數組寫到合適的輸出流。encoder可以指定屬性值class,這裏對應的類只有一個PatternLayoutEncoder,也是默認值,可以不去指定。
  • filter,過濾器分爲三種,logback-classic提供的是兩種,分別是常規的過濾器和Turbo過濾器。常用的過濾器就是按照日誌級別來控制,將不同級別的日誌輸出到不同文件中,便於查看日誌。如:錯誤日誌輸出到xxx-error.log,info日誌輸出到xxx-info.log中。
  • rollingPolicy,用來設置日誌的滾動策略,當達到條件後會自動將條件前的日誌生成一個備份日誌文件,條件後的日誌輸出到最新的日誌文件中。常用的是按照時間來滾動(使用的類TimeBaseRollingPolicy),還有一種就是基於索引來實現(使用的類FixedWindowRollingPolicy)。
  • triggeringPolicy,日誌觸發器策略,常用的是日誌的大小的控制,當日志達到對應的大小的時候,就會觸發。生成新的日誌文件。日誌大小的控制配合rollingPlicy使用的時候,不同的rollingPolicy會有所不同。

root logger 的日誌級別永遠不會設置成一個非空的值,默認是 DEBUG。

如果默認的累積行爲對你來說不適合,你可以設置 additivity = false。

在默認的情況下,appender 是可以重複使用的:logger 可以通過附加到本身的 appender 輸出日誌,同樣的也可以附加到起祖先的身上,並輸出日誌。因此,如果同一個 appender 附加到多個 logger 身上,那麼就導致日誌重複打印。

可以通過 resource 屬性來引入位於 classpath 路徑下的資源文件。

打印logback內部狀態信息,可以通過 StatusPrinter 類來調用 print() 方法查看。

public class DesUtils {
    private static Logger logger = LoggerFactory.getLogger(DesUtils.class);
    public static void main(String[] args) {
        LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
        StatusPrinter.print(lc);
        logger.info("DesUtils -> main, args= test.test");
    }
}
17:32:14,059 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
17:32:14,060 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
17:32:14,060 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
17:32:14,069 |-INFO in ch.qos.logback.classic.BasicConfigurator@726f3b58 - Setting up default configuration.

17:32:14.172 [main] INFO com.jd.pop.nethp.auditrx.common.utils.DesUtils - DesUtils -> main, args= test.test
17:33:52,279 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
17:33:52,280 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
17:33:52,280 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/E:/work/test/target/classes/logback.xml]
17:33:52,611 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
17:33:52,616 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
17:33:52,637 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [CONSOLE]
17:33:52,671 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
17:33:52,806 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
17:33:52,855 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [LOGGER-ERROR]
...略...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章