まめぞうの技術メモ

IT関連で勉強したことをメモします

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

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

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

エラーログ出力
エラーログ出力

自分で使った感触では、log4j2よりもlog4j2をより使いやすくした「slf4j」を使った方が便利です。

⇛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だけが表示されました。

ログ出力…ERRORだけが表示された

メッセージを確認してみると、

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つが全部出力できました。

log出力結果(INFO、WARN、ERROR)

サンプルコード全量

実験したいときは、以下をマルっとコピペすれば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です。");
    }
}

参考情報

以下のApache公式サイトも参考になります。

https://logging.apache.org/log4j/2.x/manual/api.html