網頁

2019/1/8

使用SpringBoot打造記帳簿專案(十二) 使用 Log4j2 + SLF4J記錄日誌

本篇說明在記帳簿專案中使用基本的log4j2搭配slf4j。

接續使用SpringBoot打造記帳簿專案(十一)建立第一個RestController

SpringBoot依賴的spring-boot-starter-web是依賴spring-boot-starter-logging來做日誌,預設使用logback日誌框架,因此若要改用log4j2來記錄日誌,必須在記帳簿專案的pom.xml進行以下配置。

先在spring-boot-starter-web依賴中設定<exclusion>排除spring-boot-starter-logging,然後加入spring-boot-starter-log4j2<dependency>

<?xml version="1.0" encoding="UTF-8"?>
<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>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.0.BUILD-SNAPSHOT</version>
    <relativePath /> <!-- lookup parent from repository -->
  </parent>
  <groupId>idv.matt</groupId>
  <artifactId>moneynote</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>moneynote</name>
  <description>moneynote</description>
  ...
  <dependencies>
    <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>
    ...
  </dependencies>
  ...
</project>

設定好pom.xml後,log4j2預設會抓取classpath下的名稱為log4j2的配置檔

log4j2可以使用xmljsonyamlpropperties格式進行配置,本篇使用json

在記帳簿專案的src/main/resources下新增log4j2.json檔,然後設定以下內容。

{
    "configuration": {
        "status": "warn",
        "appenders": {
            "Console": {
                "name": "STDOUT",
                "target": "SYSTEM_OUT",
                "PatternLayout": {
                    "pattern": "[%d{DEFAULT}][%p][%c{10}:%L] - %m%n"
                }
            }
        },
        "loggers": {
            "root": {
                "level": "info",
                "AppenderRef": {
                    "ref": "STDOUT"
                }
            }
        }
    }
}

用到的屬性請參考ConfigurationAppendersConsole(ConsoleAppender)PatternLayoutloggers

若找不到配置檔,log4j2預設使用root logger搭配ConsoleAppender,層級為Level.ERROR
PatternLayout預設為"%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"


接著修改HelloController,在hello()中使用org.slf4j.Logger來記錄日誌。

package idv.matt.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
  
  static final Logger logger = LoggerFactory.getLogger(HelloController.class.getName()); // 取得Logger

  @GetMapping("/hello")
  public String hello() {
    logger.info("start");
    
    logger.info("end");
    return "hello moneynote";
  }

設定好後啟動專案,然後在瀏覽器位址輸入http://localhost:8080/moneynote/hello來呼叫HelloController.hello()

因為log4j2.json中的設定,所以執行後會在console印出以下訊息。

[2019-01-08 23:31:26,411][INFO][idv.matt.controller.HelloController:15] - start
[2019-01-08 23:31:26,411][INFO][idv.matt.controller.HelloController:17] - end

接著請參考使用SpringBoot打造記帳簿專案(十三)撰寫第一支測試程式

設定log的Spring AOP,請參考使用SpringBoot打造記帳簿專案(十六)使用Spring AOP對方法做log

設定MyBatis Generator,請參考使用SpringBoot打造記帳簿專案(十七)使用Eclipse MyBatis Generator plugin自動產生存取資料表的檔案


參考:

沒有留言:

張貼留言