1. 程式人生 > >(三)SpringBoot配置log4j2輸出日誌

(三)SpringBoot配置log4j2輸出日誌

SpringBoot預設是用logback日誌系統進行日誌輸出的,本教程主要說明SpringBoot如何配置使用log4j2進行日誌輸出。關於logback、log4j、log4j2 哪個好,哪個效率高這種問題,這裡不做討論。

第一步:

SpringBoot預設使用logback作為日誌輸出,要配置log4j2需先在pom.xml檔案中排除預設log的依賴,並引入SpringBoot log4j2的依賴:

pom.xml:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter</artifactId>
	 <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

第二步:

在resources資料夾下建立log4j2的配置檔案log4j2-spring.xml,如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration> 
    <appenders> 
    	<!--這個輸出控制檯的配置-->
        <Console name="Console" target="SYSTEM_OUT"> 
        	<!--控制檯只輸出level及以上級別的資訊(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" /> 
            <!--這個都知道是輸出日誌的格式-->
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
        </Console>
        <!--檔案會打印出所有資訊,這個log每次執行程式會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用-->
        <File name="log" fileName="D:/app_logs/test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
        </File> 
        <!-- 這個會打印出所有的資訊,每次大小超過size,則這size大小的日誌會自動存入按年份-月份建立的資料夾下面並進行壓縮,作為存檔-->
        <RollingFile name="RollingFile" fileName="D:/app_logs/boot-logging.log" filePattern="D:/app_logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n" />
            <SizeBasedTriggeringPolicy size="50MB" />
        </RollingFile>
    </appenders> 

 	<!--然後定義logger,只有定義了logger並引入的appender,appender才會生效-->
    <loggers> 
        <root level="info">
            <appender-ref ref="Console" />
            <appender-ref ref="log" />
            <appender-ref ref="RollingFile" />
        </root>
    </loggers>
</configuration>

第三步:

編寫日誌列印測試類TestController.java (怪我總寫web太多,總是喜歡用controller測試,不大愛寫單元測試)

TestController.java:

package com.lan.BootLogging.controller;
//Logger建議用slf4j
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
	
	//Logger建議用slf4j
	Logger log = LoggerFactory.getLogger(getClass());
	
	@RequestMapping("test")
	public String test(){
		log.debug("debug ****************************");
		log.info("info ****************************");
		log.warn("warn ****************************");
		log.error("error ****************************");
		return "success";
	}
}

重要的事情說3遍:

        在程式碼中Logger建議用slf4j,不要出現log4j2、log4j、logback的蹤跡。

        在程式碼中Logger建議用slf4j,不要出現log4j2、log4j、logback的蹤跡。

        在程式碼中Logger建議用slf4j,不要出現log4j2、log4j、logback的蹤跡。

檢視日誌列印情況是否正確

多次啟動專案,發現test.log檔案總是會自動清除後重寫,修改append=true,重啟發現不會再自動清除。

The end.

author:藍何忠

email:[email protected]