LogBack實戰(Maven)

簡介

    Logback是由log4j創始人設計的又一個開源日誌組件。java

                logback當前分紅三個模塊:logback-core,logback- classic和logback-access。web

                logback-core是其它兩個模塊的基礎模塊。spring

                logback-classic是log4j的一個 改良版本。此外logback-classic完整實現SLF4J API使你能夠很方便地更換成其它日誌系統如log4j或JDK14 Logging。api

                logback-access訪問模塊與Servlet容器集成提供經過Http來訪問日誌的功能。app


導入依賴

                        <dependency>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-api</artifactId>
				<version>1.7.7</version>
			</dependency>
			<dependency>
				<groupId>ch.qos.logback</groupId>
				<artifactId>logback-core</artifactId>
				<version>1.1.3</version>
			</dependency>
			<dependency>
				<groupId>ch.qos.logback</groupId>
				<artifactId>logback-access</artifactId>
				<version>1.1.3</version>
			</dependency>
			<dependency>
				<groupId>ch.qos.logback</groupId>
				<artifactId>logback-classic</artifactId>
				<version>1.1.3</version>
			</dependency>

配置文件位置

    logback的配置文件都放在/src/main/resource/文件夾下的logback.xml文件中。放置好了以後,系統會自動找到這個配置文件。ide

配置文件詳解

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

<!-- 級別從高到低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
<!-- 日誌輸出規則 根據當前ROOT 級別,日誌輸出時,級別高於root默認的級別時 會輸出 -->
<!-- 如下 每一個配置的 filter 是過濾掉輸出文件裏面,會出現高級別文件,依然出現低級別的日誌信息,經過filter 過濾只記錄本級別的日誌 -->
<!-- scan 當此屬性設置爲true時,配置文件若是發生改變,將會被從新加載,默認值爲true。 -->
<!-- scanPeriod 設置監測配置文件是否有修改的時間間隔,若是沒有給出時間單位,默認單位是毫秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。 -->
<!-- debug 當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默認值爲false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

	<!-- 動態日誌級別 -->
	<jmxConfigurator />
	
	<!-- 定義日誌文件 輸出位置 -->
	<property name="log_dir" value="myCat_log" />
	
	<!-- 日誌最大的歷史 30天 -->
	<property name="maxHistory" value="30" /> 
	   
	<!-- ConsoleAppender 控制檯輸出日誌 -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>
				<!-- 設置日誌輸出格式 -->
				%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n
			</pattern>
		</encoder>
	</appender>

	<!-- ERROR級別日誌 -->
	<!-- 滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件時,將日誌記錄到其餘文件 RollingFileAppender -->
	<appender name="ERROR"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 過濾器,只記錄WARN級別的日誌 -->
		<!-- 果日誌級別等於配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日誌。 -->
		<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">
			<!--日誌輸出位置 可相對、和絕對路徑 -->
			<fileNamePattern>
			${log_dir}/error/%d{yyyy-MM-dd}/error-log.log
			</fileNamePattern>
			<!-- 可選節點,控制保留的歸檔文件的最大數量,超出數量就刪除舊文件假設設置每一個月滾動,且<maxHistory>是6, 則只保存最近6個月的文件,刪除以前的舊文件。注意,刪除舊文件是,那些爲了歸檔而建立的目錄也會被刪除 -->
			<maxHistory>${maxHistory}</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>
				<!-- 設置日誌輸出格式 -->
				%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n
			</pattern>
		</encoder>
	</appender>

	
	<!-- WARN級別日誌 appender -->
    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 過濾器,只記錄WARN級別的日誌 -->
        <!-- 果日誌級別等於配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日誌。 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
        	<!-- 設置過濾級別 -->
            <level>WARN</level>
            <!-- 用於配置符合過濾條件的操做 -->
			<onMatch>ACCEPT</onMatch>
			<!-- 用於配置不符合過濾條件的操做 -->
			<onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        	<!--日誌輸出位置 可相對、和絕對路徑 -->
            <fileNamePattern>${log_dir}/warn/%d{yyyy-MM-dd}/warn-log.log</fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory> 
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>
	
	
	 <!-- INFO級別日誌 appender -->
    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <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.TimeBasedRollingPolicy">
            <fileNamePattern>${log_dir}/info/%d{yyyy-MM-dd}/info-log.log</fileNamePattern> 
            <maxHistory>${maxHistory}</maxHistory> 
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>
    
    
	<!-- DEBUG級別日誌 appender -->
    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_dir}/debug/%d{yyyy-MM-dd}/debug-log.log</fileNamePattern> 
            <maxHistory>${maxHistory}</maxHistory> 
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>
    
    
    <!-- TRACE級別日誌 appender -->
    <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>TRACE</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_dir}/trace/%d{yyyy-MM-dd}/trace-log.log</fileNamePattern> 
            <maxHistory>${maxHistory}</maxHistory> 
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>
    
    
	<!-- root級別   DEBUG -->
	<root>
		<!-- 打印debug級別日誌及以上級別日誌 -->
		<level value="debug" />
		<!-- 控制檯輸出 -->
		<appender-ref ref="console" />
		<!-- 文件輸出 -->
		<appender-ref ref="ERROR" />
        <appender-ref ref="INFO" />
        <appender-ref ref="WARN" />
        <appender-ref ref="DEBUG" />
        <appender-ref ref="TRACE" />
	</root>
</configuration>


使用案例 

package com.mycat.manager.controller.test;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("test")
public class TestController {

	private final Logger logger = LoggerFactory.getLogger(this.getClass());
	
	/**
	 * logback測試
	 */
	@RequestMapping("logbackTest")
	@ResponseBody
	public String toBase() {
		logger.debug("輸出debug級別的日誌.....");  
        logger.info("輸出info級別的日誌.....");  
        logger.error("輸出error級別的日誌.....");  
		return "logbackTest";
	}
	
}


測試結果

wKioL1d962iiqhT_AANPtYiPFdc668.png

相關文章
相關標籤/搜索