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だけが表示されました。
メッセージを確認してみると、
「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つが全部出力できました。
サンプルコード全量
実験したいときは、以下をマルっとコピペすれば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公式サイトも参考になります。