logbackメモ


## ライブラリの追加

```gradle:build.gradle
compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
```
## Logbackの設定 - logback.xmlを追加する

### src/main/resourcesを作成

（Eclipseを使っている前提）

* New > Source Folder

Folder name: src/main/resources

### logback.xmlを作成

![image.png](https://qiita-image-store.s3.amazonaws.com/0/33237/004eb17a-e468-7539-c2e4-0c03bd43c171.png)

```xml:logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE logback>
<configuration>
	<appender name="STDOUT"
		class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%msg%n</pattern>
		</encoder>
	</appender>
	<root>
		<appender-ref ref="STDOUT" />
	</root>
</configuration>

```

```java
public class Library {

	public static void main(String[] args) {
		Logger logger = LoggerFactory.getLogger(Library.class);

		logger.warn("warn message");
		logger.info("info message");
	}
}

```

```bash:Console
warn message
info message
```

logback.xmlの「<pattern>%msg%n</pattern>」が効いていることを確認。


## 単純にファイルに吐き出すように設定


```xml:logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE logback>
<configuration>
	<property name="LOG_DIR" value="./logs" />
	<property name="FILE_PREFIX" value="logback" />

	<timestamp key="time" datePattern="yyyyMMdd_HHmmss" />

	<appender name="FILE" class="ch.qos.logback.core.FileAppender">
		<file>${LOG_DIR}/${FILE_PREFIX}_${time}.log</file>
		<encoder>
			<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
		</encoder>
	</appender>
	<root>
		<appender-ref ref="FILE" />
	</root>
</configuration>
```
## ログファイル数を制限したい

**注意**
コピペでログファイルを作成すると正常に動作しなくなるので気を付ける

fileNamePatternの"%d"トークンで指定した最小単位で削除されていく
maxHistoryで保持するログファイル数を設定（現在書き込み中のログファイルは数えない）
cleanHistoryOnStartがないと削除されない


```xml:毎分ごと削除されていく設定
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE logback>
<configuration>
	<property name="LOG_DIR" value="./logs" />
	<property name="FILE_PREFIX" value="logback" />
	<appender name="ROLLING"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<param name="Append" value="false" />
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

			<fileNamePattern>${LOG_DIR}/${FILE_PREFIX}-%d{yyyyMMddHHmm}.log</fileNamePattern>
			<cleanHistoryOnStart>true</cleanHistoryOnStart>
			<maxHistory>1</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd'T'HH:mm:ss'Z'} - %m%n</pattern>
		</encoder>
	</appender>

	<root>
		<appender-ref ref="ROLLING" />
	</root>
</configuration>

```


## ログファイルのサイズを制限したい

ポイントはfileNamePattern に %i を追加しているところ


```xml:logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE logback>
<configuration>
	<property name="LOG_DIR" value="./logs" />
	<property name="FILE_PREFIX" value="logback" />

	<timestamp key="time" datePattern="yyyyMMdd_HHmmss" />

	<appender name="ROLLING"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${LOG_DIR}/${FILE_PREFIX}.log</file>

		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_DIR}/${FILE_PREFIX}-%d{yyyyMMdd_HH}.%i.log</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<!-- or whenever the file size reaches 100MB -->
				<maxFileSize>5KB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd'T'HH:mm:ss'Z'} - %m%n</pattern>
		</encoder>
	</appender>

	<root>
		<appender-ref ref="ROLLING" />
	</root>
</configuration>
```


```xml:logback.xml


```


```xml:logback.xml


```



### その他

#### 設定状況もログで表示させたい

下記をappenderタグの下に追加

```
<param name="Append" value="false" />
```

#### spring-boot

* logback.xmlではなく logback-spring.xmlというファイル名にするのが主流
* 下記をrootタグと同じ階層においてあげると、速度が速くなる
    * https://github.com/spring-projects/spring-boot/issues/1796




```xml:logback-spring.xml
   <include resource="org/springframework/boot/logging/logback/defaults.xml" />
```