1. 程式人生 > >基於 Spring Boot 的 SSM 環境整合四:整合 log4j2

基於 Spring Boot 的 SSM 環境整合四:整合 log4j2

spring boot 最新的版本並不支援log4j,但支援log4j的升級版本 ---- log4j2。

1、修改pom.xml以增加log4j相關配置

首先是修改org.springframework.boot以排除相關的log資源:

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

然後加入log4j配置:

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

修改後完整的pom.xml如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.whowii</groupId>
  <artifactId>website_java4</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <!-- 引入spring-boot-start-parent 以提供dependency management,也就是依賴管理,引入以後在宣告其它dependency的時候就不需要version了 -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.3.RELEASE</version>
  </parent>
  
  <dependencies>
  	<!-- 引入spring-boot-starter-web 以包含spring webmvc和tomcat等web開發的特性 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <!-- log4j2 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
    <!-- 日誌工具
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-logging-juli</artifactId>
        <version>8.0.23</version>
    </dependency> -->
    <!-- spring mvc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>website_java4</finalName>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <!-- 增加main方式啟動的配置,若使用maven的spring-boot:run方式啟動則不需要此配置 -->
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
        	<!-- 設定主類入口 -->
        	<mainClass>com.whowii.website4.AppBoot</mainClass>
        	<!-- 設定classpath -->
        	<addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
        </configuration>
      </plugin>
    </plugins>
  </build>
  
  <!-- 設定編碼 -->
  <properties>
    <spring.version>4.3.8.RELEASE</spring.version>
  	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
</project>

完成後,記得執行下 Maven install。

2、增加 log4j2 配置檔案

在 src/main/resources 中增加 log4j2 配置檔案“log4j2.xml”,內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <Appenders>
    	<!-- 輸出控制檯 -->
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout charset="UTF-8" pattern="[%d] - [%c] - [%highlight{%level}] - [%method - %L] - [%t] - %msg%n" />
        </Console>

		<!-- 輸出到檔案
			每當檔案超過 size 規定的大小,則此日誌會自動存入按年份-月份建立的資料夾下面並進行壓縮 -->
        <File name="FILE" 
        		fileName="logs/sys.log"
               	filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="[%d] - [%c] - [%highlight{%level}] - [%l] - [%t] - %msg%n" />
            <!-- 日誌檔案最大50M -->
            <SizeBasedTriggeringPolicy size="50MB"/>
            <!-- 同一資料夾下最多20個檔案(預設7個) -->
            <DefaultRolloverStrategy max="20"/>
        </File>
    </Appenders>

    <Loggers>
        <root level="info">
            <AppenderRef ref="CONSOLE" />
            <AppenderRef ref="FILE" />
        </root>
    </Loggers>
</configuration>

3、修改 spring boot 配置檔案

修改 application.properties 追加如下內容:

logging.config= classpath:log4j2.xml

完成後的  application.properties  內容如下:

# spring mvc 配置(檢視解析器)
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp

# log4j2 配置
logging.config= classpath:log4j2.xml

4、使用 log4j2

修改DemoController以增加日誌輸出,完成後的DemoController如下:

package com.whowii.website4.admin.controller;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/demo")
public class DemoController {
	private static final Logger logger = LogManager.getLogger(DemoController.class);

	@GetMapping("/index")
	public String index() {
		logger.trace("追蹤,是最低的日誌級別,相當於追蹤程式的執行,一般不怎麼使用");
		logger.debug("一般在開發中,都將其設定為最低的日誌級別.");
		logger.info("輸出感興趣的資訊,我在開發中一般都會用info去輸出.");
		logger.warn("警告.有些時候,雖然程式不會報錯,但是還是需要告訴程式設計師的.");
		logger.error("錯誤,這個在開發中也挺常用的");

		return "demo-index";
	}
}

5、測試結果

1)、MyEclispe控制檯內容如下:

2)、重新整理專案目錄,檢視多了個 logs 資料夾:

開啟其中的 sys.log 內容如下: