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
５つのバックアップを作成するように設定します。

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を実行して、ＵＲＬにアクセスします
http://localhost:8080/

![helloworld.png](https://qiita-image-store.s3.amazonaws.com/0/246741/4295617e-7803-9b93-8885-16dc639d3f0b.png)


8.ログを確認します。
ログが出力されました
![log.png](https://qiita-image-store.s3.amazonaws.com/0/246741/0385712c-15df-44f3-6fa2-294f0f176e5f.png)