Mavenでslf4j+logbackでログを外部ファイルに出力する

初投稿です。
至らぬ点も多々あると思いますが、よろしくお願い致します。

※20190303 spring-boot-starterにAPIが含まれていたため、
spring-boot-starterをmavenから外して再度環境構築しました。

# ログをファイルに出力したい
slf4jの導入をきちんとした事が無かったので、この機会にやってみました。
ゴール
- Eclipseのコンソールと、ログファイルにログを出力させる。
- 使うAPIはslf4jとlogback

開発環境
- java 1.8
- maven

必要なAPI
- slf4j-api：jar実行時にログを出力する
- logback-classic：ログをファイルに出力する
- logback-core：ログをファイルに出力する

その他必要なもの
- logback.xml

## logback.xmlの定義
logback.xmlの定義については、かなり詳しくまとめられたサイトを参考に致しました。ご参考にして頂ければと思います。
[Logback 使い方メモ](https://qiita.com/opengl-8080/items/49719f2d35171f017aa9)


ちなみに私は次のように定義しました。

```logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE logback>
<configuration>
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
	    <encoder>
	        <pattern>%date{yyyy-MM-dd HH:mm:ss} [%thread] %level %logger{0} - %msg \(%file:%line\)%n</pattern>
	    </encoder>
	    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
	        <level>DEBUG</level>
	    </filter>
	</appender>

	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>logs/app.log</file>
	    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
	        <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log.tar.gz</fileNamePattern>
	        <maxHistory>7</maxHistory>
	    </rollingPolicy>
	    <encoder>
	        <pattern>%d{yyyy-MM-dd'T'HH:mm:ss'Z'} - %m%n</pattern>
	    </encoder>
	</appender>

	<root level="DEBUG" additivity="false">
	    <appender-ref ref="STDOUT" />
	    <appender-ref ref="FILE" />
	</root>

</configuration>

```


## pom.xmlの定義
必要なAPIを、mavenのdependencyに定義してみました（これ間違いです）。

```pom.xml
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.3</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.3</version>
</dependency>
```

で、次のソースを書いて実行。

```main.java
public class App
{
    private static Logger log = LoggerFactory.getLogger("test");
    public static void main( String[] args )
    {
    	log.debug("ログ出力テスト");
    	log.info("ログ出力テスト");
    	log.warn("ログ出力テスト");
    	log.error("ログ出力テスト");
    }
}

```

コンソールログに出力！
```console.log

2019-03-03 14:56:28testtest [main] DEBUG test - ログ出力テスト (App.java:19)
2019-03-03 14:56:28testtest [main] INFO test - ログ出力テスト (App.java:20)
2019-03-03 14:56:28testtest [main] WARN test - ログ出力テスト (App.java:21)
2019-03-03 14:56:28testtest [main] ERROR test - ログ出力テスト (App.java:22)
```

ログファイルにも出力！
```app.log
2019-03-03T14:56:28Z - ログ出力テスト
2019-03-03T14:56:28Z - ログ出力テスト
2019-03-03T14:56:28Z - ログ出力テスト
2019-03-03T14:56:28Z - ログ出力テスト
```

無事に出力されました。


因みに次のエラーが発生した場合はAPIがブッキングしている可能性があります。

```
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.
```

この記事を書いた時も発生したのですが、当初はlogback-classicとlogback-coreがslf4j-apiに含まれていると思っていました。
しかし実際に含まれていたのはspring-boot-starterで、logback-classic、logback-coreは本当は必須でした。


# 参考サイト
[Logback 使い方メモ](https://qiita.com/opengl-8080/items/49719f2d35171f017aa9)