Spring Bootのログ設定を変更する


Spring Bootを使う時のログ設定方法とlogback.xmlを記述する際のガイドラインです。

# Spring Bootのデフォルトログ設定

- コンソールにのみログが出力されます。
- ルートのログレベルは[INFO]です。
- ログの書式は [25.1 Log format](http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html#boot-features-logging-format) に書かれています。
- ログ実装はLogbackが使用されます。
- Logback以外を使用したい場合は [66.2 Configure Log4j for logging](http://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html#howto-configure-log4j-for-logging) を参考にpom.xmlを変更します。

# ログ設定方法

Spring Bootでのログ設定方法は２つあります。

<dl>
<dt>プロパティで設定する</dt>
<dd>application.ymlなどでプロパティを設定します。<br/>設定は簡単ですが、設定できる内容は限られています。</dd>
<dt>logback.xmlを記述する</dt>
<dd>Logbackの通常の使い方と同じでクラスパスのルートにlogback.xmlを作成します。<br/>プロパティ設定より面倒ですが、詳細な設定ができます。<br/>デフォルトの設定ファイルをインクルードすることで記述内容は最小限にすることができます。</dd>
</dl>


# プロパティで変更できる設定

## ログファイルの出力

以下のプロパティを設定ファイルなどで指定すると、ファイルにもログを出力するようになります。

<dl>
<dt>logging.file</dt>
<dd>ログファイルのパスとファイル名を指定します。<br/>ファイル名のみ指定した場合はカレントディレクトリに指定のファイル名で出力されます。</dd>
<dt>logging.path</dt>
<dd>ログファイルの出力先ディレクトリを指定します。ファイル名は`spring.log`になります。</dd>
</dl>

この２つは同時に指定することはできないようで、同時に指定すると`logging.file`の指定のみ有効になります。

## ログレベルの指定

プロパティ`logging.level`以下にカテゴリ名を付けて指定します。

`org.springframework`カテゴリのログレベルを`WARN`に変更するには以下のように記述します。

```application.yml
logging.level.org.springframework: WARN
```

## ルートログレベルの指定

ルートのログレベルは次のような書き方で指定します。

```application.yml
logging.level.: INFO
logging.level.root: INFO
logging.level.ROOT: INFO
```

# logback.xmlを記述する

ここまでに書いたこと以外のカスタマイズをしたい場合にはlogback.xmlを記述する必要がありますが、全てを一から記述する必要はなく、Spring Bootのデフォルトのlogback設定をインクルードすると楽になります。

デフォルトのlogback設定は、spring-boot.<バージョン>.jarの`org.springframework.boot.logging.logback`の中にある以下のファイルです。

<dl>
<dt>base.xml</dt>
<dd>デフォルト設定のルートになるファイルです。このファイルから下のファイルをインクルードしています。</dd>
<dt>defaults.xml</dt>
<dd>ログ書式などのプロパティが定義されています。<br/>そのほか、Springから使用しているライブラリのログレベルが定義してあり、無駄なログが出力されないようにしています。</dd>
<dt>console-appender.xml</dt>
<dd>デフォルトのコンソール出力の設定です。</dd>
<dt>file-appender.xml</dt>
<dd>デフォルトのファイル出力の設定です。</dd>
</dl>

logback.xmlを記述する方法はカスタマイズの内容により以下の３パターンがあります。

- デフォルト設定＋αで追加の設定をする
- デフォルト設定を変更する
- 全て独自の設定にする

## デフォルト設定＋αで追加の設定をする

Applenerを追加したい場合など、デフォルト設定はそのままで追加の設定をしたい場合は、`logback.xml`に`base.xml`をインクルードして、追加したい設定を記述します。

```logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<include resource="org/springframework/boot/logging/logback/base.xml" />
	<!-- ここに追加したい設定を記述 -->
</configuration>
```

## デフォルト設定を変更する

`defaults.xml`に定義してあるプロパティの変更など、デフォルト設定を変更したい場合は、`logback.xml`に`base.xml`の中身をコピーして、必要な変更を行います。

例えば、defaults.xmlに定義してあるログの書式(`CONSOLE_LOG_PATTERN`と`FILE_LOG_PATTERN`)を変更する場合は次のようにします。

```logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<include resource="org/springframework/boot/logging/logback/defaults.xml" />
	
	<property name="CONSOLE_LOG_PATTERN" value="..."/>
	<property name="FILE_LOG_PATTERN" value="..."/>	

	<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
	<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
	<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
	<root level="INFO">
		<appender-ref ref="CONSOLE" />
		<appender-ref ref="FILE" />
	</root>
</configuration>
```

## 全て独自の設定にする

好きなように書いてください。

# 参考

Spring Boot 公式ドキュメント

- [25. Logging](http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html)
- [66. Logging](http://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html)

デフォルトのlogback設定ファイル(github)

- [base.xml](https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/resources/org/springframework/boot/logging/logback/base.xml)
- [defaults.xml](https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml)
- [console-appender.xml](https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/resources/org/springframework/boot/logging/logback/console-appender.xml)
- [file-appender.xml](https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/resources/org/springframework/boot/logging/logback/file-appender.xml)

Logback

- [Logback Home](http://logback.qos.ch/)