Log4j設定

上の本を読み直していて、log4jのlog4j.propetiesの内容があったのでコピーできるよう残します。

内容はおいおい確認します。

買った当初(8年前くらいかな)はよくわからなかったけど、仕事上JAVAをコーディングするようになったら、よくできた本だと再認識しました。

また、参照ライブラリに追加するjarは以下です。

log4j-1.2-api-2.14.0.jar

log4j-api-2.14.0.jar

log4j-core-2.14.0.jar

(追記)log4j.propetiesがlog4j 2では廃止になったそうです。

情報元

よってxml用のものを情報もとから引用しました。

ファイル名は 「log4j2.xml」とします。

<?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>

サンプルコード

import org.apache.log4j.Logger;

public class Main {

	private static final Logger logger = Logger.getLogger(Main.class);

	public static void main(String[] args) {
		int[] i = { 1, 2, 3, 4, 5 };
		for (int ii : i) {
			logger.info(ii);
		}
	}

}