Log處理(一)_Log4j和Logback

一:簡介

1.其實已經有很多的log4j的文章,但是爲了自己以後用起來方便,還是自己寫一個吧

2.Log4j是一個很流行的Java日誌記錄工具,提供了很多日誌打印的特性,常用的配置包括:logger、appender和layout,即日誌對象、輸出位置、輸出樣式;

3.Log4j的日誌級別分爲7個等級:ALL、DEBUG、INFO、WARN、ERROR、FATAL、OFF,從左到右等級由低到高,分等級是爲了設置日誌輸出的門檻,只有等級等於或高於這個門檻的日誌纔有機會輸出;

二:配置簡介(使用log4j.properties配置)

1、logger

  日誌實例,就是代碼裏實例化的Logger對象,格式如下,LEVEL用來設定日誌等級,appenderName定義日誌輸出器:

1

2

log4j.rootLogger=LEVEL,appenderName1,appenderName2,...

log4j.additivity.org.apache=false:表示不會在父logger的appender裏輸出,默認true

  下面的例子中給出了4種不同的Logger打印日誌的appender:

1

2

log4j.rootLogger=DEBUG,console,dailyFile,rollingFile,logFile

log4j.additivity.com.demo.test=false

2、appender

 a)日誌輸出器,指定logger的輸出位置

1

log4j.appender.appenderName=className

  appender有5種選擇

1

2

3

4

5

org.apache.log4j.ConsoleAppender(控制檯)

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)

org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)

org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)

 b)每種appender都有若干配置項,下面逐一介紹

  Threshold=WARN:指定日誌信息的最低輸出級別,默認DEBUG

   ImmediateFlush=true:表示所有消息都會被立即輸出,設爲false則不輸出,默認值是true

   Append=false:true表示消息增加到指定文件中,false則將消息覆蓋指定的文件內容,默認true

   File=D:/logs/logging.log4j:指定消息輸出到logging.log4j文件

   log4j.appender.xxx.layout=org.apache.log4j.PatternLayout

   log4j.appender.xxx.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n

3、layout

   a)幾種常見的模式

      org.apache.log4j.HTMLLayout(以HTML表格形式佈局)

      org.apache.log4j.PatternLayout(可以靈活地指定佈局模式)

      org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串)

      org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)

b)參數的含義

  %m 輸出代碼中指定的消息;%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL;

  %r 輸出自應用啓動到輸出該log信息耗費的毫秒數 ;%c 輸出所屬的類目,通常就是所在類的全名;

   %t 輸出產生該日誌事件的線程名;%n 輸出一個回車換行符,Windows平臺爲“rn”,Unix平臺爲“n”;

   %d 輸出日誌時間點的日期或時間;%l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10) 作者:杜琪 鏈接:https://www.jianshu.com/p/c6c543e4975e 來源:簡書 簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。

二:配置簡介(使用xml配置)

    這種配置方式可用於logback和log4j,也是通過配置logger、appender、pattern來進行配置的,比如下面的例子中,定義了3個logger:console、普通按天分塊日誌、供logstash使用的日誌,還定義了pattern

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
##繼承logback的默認配置
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    ​
##日誌路徑和名稱
    <property name="LOG_FILE" value="${LOG_PATH:-logs}/${springAppName}"/>​

##日誌打印格式
    <property name="CONSOLE_LOG_PATTERN"
              value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr([${springAppName:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}]){yellow} %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %L %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>

##控制檯的日誌打印
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- Minimum logging level to be presented in the console logs-->
            <level>DEBUG</level>
        </filter>
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

##普通的日誌文件,並且以天爲單位切割日誌文件
    <appender name="flatfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.gz</fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

##供logstash使用的日誌文件,並且以天爲單位切割日誌文件
    <!-- Appender to log to file in a JSON format -->
    <appender name="logstash" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}.json</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}.json.%d{yyyy-MM-dd}.gz</fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>
                    <pattern>
                        {
                        "severity": "%level",
                        "service": "${springAppName:-}",
                        "trace": "%X{X-B3-TraceId:-}",
                        "span": "%X{X-B3-SpanId:-}",
                        "parent": "%X{X-B3-ParentSpanId:-}",
                        "exportable": "%X{X-Span-Export:-}",
                        "pid": "${PID:-}",
                        "thread": "%thread",
                        "class": "%logger{40}",
                        "rest": "%message"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
    </appender>
    ​
    <root level="INFO">
        <appender-ref ref="console"/>
        <appender-ref ref="flatfile"/>
        <appender-ref ref="logstash"/>
    </root>
</configuration>

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章