SpringBootでログを出力する


SpringBootでログを実装します

SpringBootを使うとログも簡単に実装できます

1.構成

sample-logger
│  build.gradle
└─src
    └─main
        ├─java
        │  └─com
        │      └─ccc
        │          │  SamplePrj02LogApplication.java
        │          │  ServletInitializer.java
        │          ├─common
        │          │      LogUtils.java
        │          └─local
        │                  HeloController.java
        └─resources
            │  application.properties
            │  logback.xml
            ├─static
            └─templates
                    index.html

2.依存関係

build.gradle
dependencies {
    compile('org.springframework.boot:spring-boot-starter-thymeleaf')
    compile('org.springframework.boot:spring-boot-starter-web')
    runtime('org.springframework.boot:spring-boot-devtools')
    compileOnly('org.projectlombok:lombok')
    providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

3.ログの設定ファイル

resorceの下にlogback.xmlを配置します

logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
    <timestamp key="LOG_DATE" datePattern="yyyyMMdd"/>
    <property name="LOG_FILE" value="C:/springboot/log/HeloController.log" />
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
          <fileNamePattern>${LOG_FILE}.%d{yyyyMMdd}</fileNamePattern>
            <maxHistory>5</maxHistory>
        </rollingPolicy>
    </appender>
    <root level="TRACE">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

fileNamePattern
ログファイル名の後ろに日付をつけてログをローテーションします。
maxHistory
5つのバックアップを作成するように設定します。

4.ログ出力クラス

ログ出力のユーティリティクラスを作成します。

LogUtils.java
package com.ccc.common;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogUtils {
    protected final static Logger logger = LoggerFactory.getLogger(LogUtils.class);
    public static void info(String msg) {
        logger.info(msg);
    }
    public static void warn(String msg) {
        logger.warn(msg);
    }
    public static void error(String msg) {
        logger.error(msg);
    }
    public static void debug(String msg) {
        logger.debug(msg);
    }
    public static void trace(String msg) {
        logger.trace(msg);
    }
}

5.Controller
Webアプリケーション実行時にログを出力します

HeloController.java
package com.ccc.local;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.ccc.common.LogUtils;

@Controller
public class HeloController {
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String index(Model model) {
        model.addAttribute("message", "Hello Springboot");
        LogUtils.trace("トレースログです");
        LogUtils.debug("デバッグログです");
        LogUtils.info("情報ログです");
        LogUtils.warn("警告ログです");
        LogUtils.error("エラーログです");
        return "index";
    }
}

6.HTML
ログを出力することが目的なのでViewはなんでもよい。HelloWorldを表示しています

index.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>Hello</title>
        <meta charset="utf-8" />
    </head>
    <body>
        <h1>Springboot Hello Sample</h1>
        <p>
            <span th:text="${message}"></span>!!!
        </p>
    </body>
</html>

7.実行してログが出力されることを確認します
Springbootを実行して、URLにアクセスします
http://localhost:8080/

8.ログを確認します。
ログが出力されました