ロガー

### Log(ログ)
ログとは、プログラム動作中にファイルに柿田さる動作記録のことであり、プログラムの動作状況や障害原因を把握するための情報源です。
ログの出力には何らかのライブラリを利用することが一般的です。

Javaで利用される代表的なログ出力ライブラリ

|名称　　　　　　　　　　　　|説明　　　　　　　　　　　　　　|
|:----------------------|:---------------------------------|
| Log4J       　　　　　　| 古くから利用され実績が多いライブラリ|
| java.util.logging     | Java 1.4から標準APIとして利用可能なクラス群|
| commons-logging       | ログ出力実装を切り替えらる代表的なライブラリ|
| SLF4J                 | ログ出力実装を切り替えられるライブラリ。Log4Jの後継的存在|

それぞくのライブラリによって細かな利用方法や設定は異なりますが、いずれも次のような基本機能を備えています。

- メソッドを呼び出せば、文字列をログファイルなどに出力することができます。
- ログ出力時に重要度(ログレベル)を指定できる。

#### ログレベル
重要度の数や名前はライブラリによって異なりますが、通常は5~8段階程度です。

以下はjava.util.logging.Loggerで定義されているログレベルです。

| Loggerメソッド | 対応する要求レベル | 出力される名称 |
|:--|:--|:--|
| -- | Level.ALL | -- |
| Logger.finest() | Level.FINEST | 最も詳細 |
| Logger.finer() | Level.FINER| 詳細 |
| Logger.fine() | Level.FINE | 普通 |
| Logger.config() | Level.CONFIG | 構成 |
| Logger.info() | Level.INFO | 情報 |
| Logger.warning() | Level.WARNING | 警告 |
| Logger.severe() | Level.SEVERE | 重大 |

```java
package com.test.logging;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

class log {

    static Logger logger = Logger.getLogger(log.class.getName());

    public static void main(String[] args) {
        try {
            String filePath = "ログ用ファイルのパス";

            // ファイル出力　false : 上書き , true : 追記
            FileHandler fileHandler = new FileHandler(filePath, false);
            fileHandler.setFormatter(new SimpleFormatter());
            logger.addHandler(fileHandler);
            // ファイルに出力する際のログレベルを設定, FINEレベル以上のログが出力される
            logger.setLevel(Level.FINE);

            // コンソール上でログの内容を確認するためにConsoleHandlerを設定
            ConsoleHandler consoleHandler = new ConsoleHandler();
            // 標準出力の要求レベルを設定, CONFIGレベル以上のログが出力される
            consoleHandler.setLevel(Level.CONFIG);
            logger.addHandler(consoleHandler);
            // 親ロガー設定(false : 親ロガーへ送信しない , true : 親ロガーへ送信)
            logger.setUseParentHandlers(false);

            logger.finest("FNST");
            logger.finer("FNR");
            logger.fine("FN");
            logger.config("CFG");
            logger.info("INF");
            logger.warning("WNG");
            logger.severe("SVR");

            throw new IOException();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IOException e) {
            logger.log(Level.FINER, "エラー発生", e);
            System.out.println("エラー");

        }
    }

}
```

#### 実行結果
##### 標準出力
```text
4月 04, 2021 12:49:50 午前 com.test.logging.Log main
構成: CFG
4月 04, 2021 12:49:50 午前 com.test.logging.Log main
情報: INF
4月 04, 2021 12:49:50 午前 com.test.logging.Log main
警告: WNG
4月 04, 2021 12:49:50 午前 com.test.logging.Log main
重大: SVR
エラー
```

##### ファイル出力
```text
4月 04, 2021 12:49:50 午前 com.test.logging.Log main
普通: FN
4月 04, 2021 12:49:50 午前 com.test.logging.Log main
構成: CFG
4月 04, 2021 12:49:50 午前 com.test.logging.Log main
情報: INF
4月 04, 2021 12:49:50 午前 com.test.logging.Log main
警告: WNG
4月 04, 2021 12:49:50 午前 com.test.logging.Log main
重大: SVR

```