1. 程式人生 > >Logback日誌工具使用詳解

Logback日誌工具使用詳解

    Logback是由log4j創始人設計的又一個開源日誌元件。logback當前分成三個模組:logback-core,logback- classic和logback-access。logback-core是其它兩個模組的基礎模組。logback-classic是log4j的一個 改良版本。此外logback-classic完整實現SLF4J API使你可以很方便地更換成其它日誌系統如log4j或JDK14 Logging。logback-access訪問模組與Servlet容器整合提供通過Http來訪問日誌的功能。         --轉自百度百科

     由於Logback比log4j和SLF4J擁有眾多優點,如效能(據說有時達到10倍以上),並且支援自動載入配置檔案,自動刪除舊的日誌檔案,以及同一個logback配置檔案同時適應開發,測試,生產等。因此Logback官方強烈建議開發人員從log4j轉到使用Logback。

    一、實戰

      1. logback的maven依賴:   

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.1.7</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.7</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-access -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-access</artifactId>
            <version>1.1.7</version>
        </dependency>

     2. logback.xml檔案配置:

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

<configuration debug="true" scan="true" scanPeriod="30 seconds">

    <!--控制檯輸出日誌資訊-->
    <appender name="CONSOLE-LOG" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are  by default assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%level] - %m%n</pattern>
        </encoder>
    </appender>

    <!-- 輸出error級別的日誌到error.log檔案中 -->
    <appender name="ERROR-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/error.log</file>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n</pattern>
        </encoder>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>error.%d{yyyy-MM-dd}.log.zip</fileNamePattern>

            <!-- keep 30 days' worth of history -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 輸出info級別的日誌到error.log檔案中 -->
    <appender name="INFO-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/info.log</file>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n</pattern>
        </encoder>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>info.%i.log</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>3</maxIndex>
        </rollingPolicy>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>

    </appender>

    <appender name="DEBUG-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/debug.log</file>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n</pattern>
        </encoder>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>debug.%i.log</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>3</maxIndex>
        </rollingPolicy>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>

    </appender>



    <root level="debug">
       <appender-ref ref="CONSOLE-LOG" />
        <appender-ref ref="ERROR-LOG" />
        <appender-ref ref="INFO-LOG" />
        <appender-ref ref="DEBUG-LOG" />
    </root>
</configuration>

      logback的專案目錄結構:

                      

   3.LogBackTest.java

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogBackTest {

    private static Logger Log = LoggerFactory.getLogger(LogBackTest.class);

    @Test
    public void test() {

        Log.debug("debug log");
        Log.info("info log");
        Log.error("error log");

    }


}

       4. 結果輸出:

        4.1 console:        

2017-02-08 14:41:10 [DEBUG] - debug log
2017-02-08 14:41:10 [INFO] - info log
2017-02-08 14:41:10 [ERROR] - error log

        4.2 日誌檔案輸出:  

               

     debug.log的內容:      

2017-02-08 14:41:10 [LogBackTest:13] - info log
     error.log的內容:     
2017-02-08 14:41:10 [LogBackTest:14] - error log
     info.log的內容:
2017-02-08 14:41:10 [LogBackTest:13] - info log


看,簡單吧!