プログラミングと資産運用な日々

プログラミングと資産運用が中心の雑記ブログです。

【Java】Log4j2でログ出力する方法

Javaでログを出力するといえば「log4j」です。

最近、log4jの後継のlog4j2を触る機会があって、やり方を調べたので以下に記します。

※しかし、log4j2よりもlog4j2をより使いやすくした「slf4j」を使った方が便利です。

この記事では、一旦、log4j2についての基本的な使い方を説明します。

まずはライブラリをインポートしよう

  • 「log4j-core」と「log4j-api」の2つが必要です。
  • まずはMavenRepository等からダウンロードしましょう。

Maven Repository: org.apache.logging.log4j » log4j-core

https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api

  • ダウンロードしてクラスパスに配置したら、以下の2つをインポートしてください。
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

log4jの基本的な使い方

  • さて、インポートしたら、以下の構文でログを吐けます。コメントを参考にしてください。
// ロガーを呼び出します
Logger logger = LogManager.getLogger("Logger");

// INFOを吐きます
logger.info("INFOです");

//WARNを吐きます
logger.warn("WARNです");

// ERRORを吐きます
logger.error("ERRORです。");

log4j2の設定

  • さて、これで実行してみるとどうなるか。。
  • ERRORだけが表示されました。

    f:id:toyo--104:20181220235512p:plain

  • No Log4j 2 configuration file found. Using default configuration」、つまり、「log4j2の設定ファイルがないから、デフォルト設定を使うよ」ということです。
  • デフォルト設定が、ERRORのみコンソール出力になります。

設定を追加しよう

  • クラスパスに「log4j2.xml」というファイルを追加してください。
  • サンプルを載せますね。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>
  • 「Root level 」で「INFO」以上を設定にしています。
  • 「AppenderRef」で、「Console」コンソール出力を設定しています。

実行

  • 今度は、INFO、WARN、ERRORの3つが全部出力できました。

    f:id:toyo--104:20181221000235p:plain

サンプルコード全量

  • 実験したいときは、以下を丸っと貼ってもらえばOKです!
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

public class LogTest {
    public static void main(String[] args){
        // ロガーを呼び出します
        Logger logger = LogManager.getLogger("Logger");

        // INFOを吐きます
        logger.info("INFOです");

        //WARNを吐きます
        logger.warn("WARNです");

        // ERRORを吐きます
        logger.error("ERRORです。");
    }
}

参考情報