本篇說明在記帳簿專案中使用基本的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可以使用xml
,json
,yaml
或propperties
格式進行配置,本篇使用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"
}
}
}
}
}
用到的屬性請參考Configuration,Appenders,Console(ConsoleAppender),PatternLayout,loggers。
若找不到配置檔,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自動產生存取資料表的檔案。
參考:
沒有留言:
張貼留言