log4j2とxmlの設定ファイルを使用してテキストファイルにログを出力するサンプル(手順)です。
確認環境 ・Windows10 ・Java 9/Java 8 ・eclipse 4.7/4.6 ・log4j-api-2.11.0.jar ・log4j-core-2.11.0.jar |
目次
サンプル | log4j 2 |
1.jarファイルの取得 | |
2.jarファイルをクラスパス(ビルドパス)に追加 | |
3.設定ファイルの作成 | |
4.ソースコードの作成 | |
5.出力ファイルの確認 |
log4j 2
- log4j 2は、ログを出力するライブラリです。
- 以下は、Apacheのlog4j 2のJavadocです。
http://logging.apache.org/log4j/2.x/log4j-api/apidocs/index.html
1.jarファイルの取得
以下のサイトからapache-log4j-2.11.0-bin.zipをダウンロードします。
Apache log4j2のサイト
http://logging.apache.org/log4j/2.x/download.html
ダウンロードしたzipを展開し以下のファイルを任意の場所に配置します。
・log4j-api-2.11.0.jar
・log4j-core-2.11.0.jar
2.jarファイルをクラスパス(ビルドパス)に追加
以下のjarをクラスパスに追加します。
log4j-api-2.11.0.jar
log4j-core-2.11.0.jar
クラスパスに追加する手順は、以下を参照願います。
Eclipse jarファイルをクラスパスに設定する方法
3.設定ファイルの作成
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 フォルダを作成してビルドパスに設定する手順
4.ソースコードの作成
テキストファイルにログを出力するコードです。
package test1;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Test1 {
public static void main(String[] args) {
Sample s = new Sample();
s.testLog();
}
}
class Sample {
//getLoggerの引数はロガー名を指定する。
//log4j2では、ロガー名の指定が省略可能になった。
private Logger logger = LogManager.getLogger();
void testLog() {
logger.trace("Start"); //2017/01/21 06:02:17.154 [main] TRACE test1.Sample Start
int a = 1;
int b = 2;
String c = null;
logger.debug("debug"); //2017/01/21 06:02:17.157 [main] DEBUG test1.Sample debug
logger.info("info={}",a); //2017/01/21 06:02:17.159 [main] INFO test1.Sample info=1
logger.warn("warn={},={}" ,a,b); //2017/01/21 06:02:17.159 [main] WARN test1.Sample warn=1,=2
logger.error("error={}",c); //2017/01/21 06:02:17.171 [main] ERROR test1.Sample error=null
logger.trace("End"); //2017/01/21 06:02:17.172 [main] TRACE test1.Sample End
}
}
15行目は、LogManagerクラスのインスタンスを取得しています。変数の型のLoggerはインターフェースです。
19行目以降は、ログをテキストに出力します。
5.出力ファイルの確認
実行するとコンソールと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
2017/01/22 09:58:46.326 [main] TRACE test1.Sample End
何度も実行するとファイルローテションの設定のとおり、現ファイルと+過去3ファイルが出力されます。
関連の記事
Java LogbackとSLF4jでテキストにログを出力
Java log4j 1.2でテキストにログを出力(テキストで設定)
Java log4j 1.2でテキストにログを出力(xmlで設定)
Java log4j 1.2でコンソールにログを出力するサンプル