log4j2とxmlの設定ファイルを使用してテキストファイルにログを出力するサンプル(手順)です。
(確認環境:Java 8,Eclipse 4.8,Windows10)
目次
サンプル | log4j 2とは |
log4j 2の取得方法 | |
設定ファイルの作成(log4j2.xml) | |
log4j 2でログを出力するコード | |
出力ファイルの確認 |
log4j 2とは
- log4j 2は、ログを出力するライブラリです。
- 以下は、Apacheのlog4j 2のJavadocです。
http://logging.apache.org/log4j/2.x/log4j-api/apidocs/index.html
log4j 2の取得方法
1.Mavenで取得する場合
pom.xmlの<dependencies>の間に以下のコードを追加します。
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.0</version>
</dependency>
※mvnrepositoryのサイトで最新のバージョンか確認して下さい。
https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core
Mavenで取得する手順は、以下を参照願います。
Eclipse Mavenでjarを取得(Java)
2.jarファイルで取得する場合
以下のサイトからapache-log4j-2.xx.x-bin.zipをダウンロードします。
Apache log4j2のサイト
http://logging.apache.org/log4j/2.x/download.html
ダウンロードしたzipを展開して任意の場所に配置しjarファイルをクラスパスに追加します。
・log4j-api-2.xx.x.jar
・log4j-core-2.xx.x.jar
クラスパスに追加する手順は、以下を参照願います。
Eclipse jarファイルをクラスパスに設定する方法
設定ファイルの作成(log4j2.xml)
log4j2.xmlというファイルを作成しコードを記述します。
log4j1系であったテキスト(log4j.properties)での設定は廃止されました。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project>
<Configuration status="off">
<!-- Propertiesは、nameの値を変数として使える -->
<Properties>
<Property name="format1">%d{yyyy/MM/dd HH:mm:ss.SSS} [%t] %-6p %c{10} %m%n</Property>
<!-- ログのフォーマット
%dは日時。{}に日時の形式を指定
%tはスレッド名
%-6pはログレベル名称を左詰めで6文字分出力する。「debug」であれば後ろに空白1文字が追加される。
但し、%-3pとしても名称は削られず「debug」として出力される。%6と-をとると右づめになる。
%c{x}は,例えばロガー名がorg.apache.commons.Fooのとき%c{2}の場合、commons.Fooが出力される
%mはログメッセージ
%nは改行
-->
<Property name="logfile">./log/testlog.log</Property>
<Property name="logfile-archive">./log/testlog_%d{yyyy-MM-dd}-%i.log</Property>
</Properties>
<Appenders>
<!-- コンソールに出力する設定 -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout>
<pattern>${format1}</pattern>
</PatternLayout>
</Console>
<!-- ファイルに出力する設定 -->
<RollingFile name="logfile001" append="true" fileName="${logfile}"
filePattern="${logfile-archive}">
<PatternLayout>
<pattern>${format1}</pattern>
</PatternLayout>
<Policies>
// 1kBに達したらローテーションのファイルを作成する
<SizeBasedTriggeringPolicy size="1KB"/>
</Policies>
// ローテーションのファイルは、3つ持つ
<DefaultRolloverStrategy max="3"/>
</RollingFile>
</Appenders>
<Loggers>
// trace以上のログを出力する
<Root level="trace">
<AppenderRef ref="Console" />
<AppenderRef ref="logfile001" />
</Root>
</Loggers>
</Configuration>
各タグの説明は以下のとおりです。
タグ | 説明 |
---|---|
Properties | 変数の設定 nameの値を変数として使用しています。(例:7行目のformat1は、25行目で使用されている) ログのフォーマット出力形式は以下のlog4j2公式サイトを参照。 http://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout |
Appenders | 出力先の設定 ログをコンソールとファイルに出力し、出力形式の指定をしています。 ファイルはローテションの設定をしています。 |
Loggers | ログレベルの設定。 コンソールとファイルにtrace以上のログを出力する設定をしています。 |
xmlファイルの配置先
フォルダを作成してフォルダにビルドパスを追加しその中にlog4j2.xmlを置きます。
Eclipse フォルダを作成してビルドパスに設定する手順
log4j 2でログを出力するコード
package test1;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Test1 {
public static void main(String[] args) {
Logger logger = LogManager.getLogger();
logger.trace("Start"); // 2017/01/21 06:02:17.154 [main] TRACE test1.Sample Start
int a = 1;
int b = 2;
logger.trace("End"); // 2017/01/21 06:02:17.172 [main] TRACE test1.Sample End
logger.debug("debug"); // 2017/01/21 06:02:17.157 [main] DEBUG test1.Sample debug
logger.info("情報={}", a); // 2017/01/21 06:02:17.159 [main] INFO test1.Sample info=1
logger.warn("警告={},={}", a, b); // 2017/01/21 06:02:17.159 [main] WARN test1.Sample warn=1,=2
try {
throw new NullPointerException();
}catch(Exception e) {
logger.error("エラー", e); // 2017/01/24 18:19:02.516 [main] ERROR Sample エラー
} // java.lang.NullPointerException: null
}
}
9行目は、LogManagerクラスのインスタンスを取得しています。
getLoggerの引数はありません。この場合ログにパッケージ名とクラス名が出力されます。
24行目は、例外のインスタンスを引数にしています。
出力ファイルの確認
実行するとコンソールとlogフォルダにログファイルが出力されます。
出力されるログは以下の通りです。
2017/01/22 09:58:46.004 [main] TRACE test1.Sample Start
2017/01/22 09:58:46.006 [main] DEBUG test1.Sample debug
2017/01/22 09:58:46.007 [main] INFO test1.Sample info=1
2017/01/22 09:58:46.007 [main] WARN test1.Sample warn=1,=2
2017/01/22 09:58:46.325 [main] ERROR test1.Sample error=null
何度も実行するとファイルローテションの設定のとおり、現ファイルと+過去3ファイルが出力されます。
関連の記事
Java LogbackとSLF4jでテキストにログを出力
Java log4j 1.2でテキストにログを出力(テキストで設定)
Java log4j 1.2でテキストにログを出力(xmlで設定)
Java log4j 1.2でコンソールにログを出力するサンプル