logback使用

jopen 8年前發布 | 14K 次閱讀 日志處理

1.需要添加的包

logback-classic-1.1.3.jar
logback-core-1.1.3.jar
slf4j-api-1.7.12.jar

2.關于配置文件讀取

 系統啟動,默認加載在classpath下的logback.xml 或者 logback-test.xml和 logback.groovy 文件,

一般我們只要在classpath下添加logback.xml文件

3.關于日志創建

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Test {
    private static final Logger LOGGER = LoggerFactory.getLogger(Test.class);

    public void logOutPut(){
        LOGGER.debug("hello word");
    }

    public static void main(String[] args) {
        Test t = new Test();
        t.logOutPut();
    }
}
4.logback.xml詳解

文檔結構:

<configuration>
    <contextName></contextName>
    <property/> 
    <timestamp></timestamp>
    <appender>...</appender>
    <logger> ...</logger>
    <root>...</root>
</configuration>

4.1設置根節點

start: configuration

<configuration scan="true" scanPeriod="60 seconds" debug="false">...</configuration >
scan 當此屬性設置為true時,配置文件如果發生改變,將會被重新加載,默認值為true。

scanPeriod 設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位(milliseconds、seconds、minutes和hours),默認單位是毫秒(milliseconds)。當scan為true時,此屬性生效。默認的時間間隔為1分鐘。

debug 當此屬性設置為true時,將打印出logback內部日志信息,實時查看logback運行狀態。默認值為false。

end: configuration


4.2 設置上下文名稱

start:contextName


<contextName>mylogConfig</contextName>
每個logger都關聯到logger上下文,默認上下文名稱為“default”。但可以使用<contextName>設置成其他名字,用于區分不同應用程序的記錄。一旦設置,不能修改。


end:contextName


4.3 設置變量

start:property

<configuration>
      <property name="LogConfig" value="mylogConfig" />
      <contextName>${LogConfig}</contextName> 
</configuration>

用來定義變量值的標簽,通過<property>定義的值會被插入到logger上下文中。定義變量后,可以使“${}”來使用變量。

name : 變量的名稱

value : 變量定義的值

end:property


4.4 獲取時間戳字符串

start:timestamp

<timestamp key="date" datePattern="yyyy-MM-dd"/>
key : 標識名字

datePattern : 設置將當前時間(解析配置文件的時間)轉換為字符串的模式,遵循java.txt.SimpleDateFormat的格式。

end:timestamp


4.5 所有日志器的總的設置 root

start:root


<root level="error">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE-AUDIT" />
</root>


也是<loger>元素,但是它是根loger

level : 設置所有日志的輸出級別

<appender-ref>:設置所有日志的apender

end:root


4.6 個別日志器的個性化設置 logger

start:logger

<logger name="com.mkyong.web" level="debug" additivity="false">
     <appender-ref ref="STDOUT" />
     <appender-ref ref="FILE-AUDIT" />
 </logger>
用來設置某一個或者具體的某一個下的日志的打印級別、以及為其指定<appender>。

name : 可以是某一級的包名,也可以是一個完整的類名。必要

level : 打印級別,如果不指定默認為root中的打印級別

additivity : 是否向上級loger傳遞打印信息。默認是true

<appender-ref> : 日志輸出設置,可以為logger其指定多個appender。如果不指定默認為root的appender

end:logger


4.7 設置日志輸出方式appender

star:appender

總的結構(只是列出些常用的)

<appender>
    <target></target>
    <encoder></encoder>
    <filter></filter>
    <file>文件輸出-指定的文件路徑</file>
    <append>文件輸出-是否向舊的日志追加新內容</append>
    <rollingPolicy>文件輸出-文件滾動策略</rollingPolicy>
    <prudent>文件輸出—</prudent>
    <triggeringPolicy>文件輸出-激活滾動</triggeringPolicy>
</appender>

例1(控制臺輸出):

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <target>System.out</target>
        <encoder>
           <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} -%msg%n
           </Pattern>
           <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
           <level>error</level>
           <onMatch>DENY</onMatch>
           <onMismatch>ACCEPT</onMismatch>
        </filter>
    </appender>

    <appender name="STDOUT_ERROR" class="ch.qos.logback.core.ConsoleAppender">
        <target>System.err</target>
        <encoder>
           <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
           </Pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
           <level>error</level>
           <onMatch>ACCEPT</onMatch>
           <onMismatch>DENY</onMismatch>
        </filter>
    </appender>



例2(輸出到文件):


<appender name="FILE-AUDIT" class="ch.qos.logback.core.FileAppender">
    <encoding>UTF-8</encoding>
    <!-- today log -->
    <file>usr/logs/appName/test.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
       <Pattern>
         %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
       </Pattern>
    </encoder>
    <append>false</append>
</appender>


例3 (滾動方式輸出到文件):



<appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <encoding>UTF-8</encoding>
    <!-- today log -->
    <file>usr/logs/appName/error.today.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
       <Pattern>
       %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
       </Pattern>
    </encoder>
    <append>false</append>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>usr/logs/appName/archived/error.%d.%i.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
         <maxFileSize>10MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>

</appender>


1. <appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">...</appender>
name : appender的標識名稱

class : 指定日志輸出方案的具體實現類。(以下是官方提供的幾種方案)

  • ch.qos.logback.core.ConsoleAppender                   //輸出到控制臺
  • ch.qos.logback.core.FileAppender                         //輸出到文件
  • ch.qos.logback.core.rolling.RollingFileAppender    //以滾動方式輸出到文件


2.<target>:當為控制臺輸出時可為其指定 System.out 或者 System.err,默認 System.out 

3.<encoding: 設置文件的編碼方式

4.<filter>:設置輸出時過濾策略

5.<file>:當為文件輸出時,為其指定文件路徑。可以是絕對,也可以是相對,如果上級目錄不存在會自動創建,沒有默認值。

6.<append>:當為文件輸出時,是否向舊的日志追加新內容

7.<rollingPolicy>:當發生滾動時,決定 RollingFileAppender 的行為,涉及文件移動和重命名。

8. <prudent> :如果是 true,日志會被安全的寫入文件,即使其他的FileAppender也在向此文件做寫入操作,效率低,默認是 false

9.<triggeringPolicy> :  告知 RollingFileAppender 合適激活滾動。

10.<encoder>:


end:appender

一些常用的配置:見《logback常用配置》


來自: http://my.oschina.net/u/2552286/blog/597358

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!