解答例 - 実習課題1 - 3.APPENDER
(実習課題1)
1 秒置きに 0 〜 99 の乱数を発生させ、その値が 3 の倍数である場合と 5 の倍数である場合とで異なるファイルにログメッセージを書き込むプログラムを作成しなさい。
- 3 の倍数の場合は、一分おきにバックアップを作成すること。
- 5 の倍数の場合は、ファイルサイズが 1kB を超えるごとにバックアップを作成すること。
- 5 の倍数の場合のファイルのバックアップの最大インデックスは任意。
- ログを出力するときのイベントレベルは何でも良い。
- PropertyConfigurator を使用して、設定ファイルによりログ出力を制御すること。
- 出力フォーマットは PatternLayout で指定すること。指定方法は以下の通り。
# APPENDER が A の時、 log4j.appender.A.layout=org.apache.log4j.PatternLayout log4j.appender.A.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
解答例
/** * Log4jExample.java * TECHSCORE Java Jakarta Log4J 3章 実習課題1 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ package com.techscore.log4j.chapter3.exercise1; import java.io.IOException; import java.util.Random; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; public class Log4jExample extends Thread { private Logger tripleLogger; //3の倍数用 private Logger fifthLogger; //5の倍数用 private static Thread thread; public Log4jExample(String fileName) { //インスタンスの生成 tripleLogger = Logger.getLogger("tripleLogger"); fifthLogger = Logger.getLogger("fifthLogger"); PropertyConfigurator.configure(fileName); } public static void main(String[] args) throws IOException { if (args.length == 0) { System.out.println("引数に設定ファイルを指定してください"); return; } //インスタンス生成 thread = new Log4jExample(args[0]); thread.start(); } public void run() { Random random = new Random(); Thread currentThread = Thread.currentThread(); while (thread.equals(currentThread)) { int randomNumber = random.nextInt(100); //0〜99の乱数 if (randomNumber % 3 == 0) { tripleLogger.debug(randomNumber + "は3で割り切れる数字です"); } else if (randomNumber % 5 == 0) { fifthLogger.info(randomNumber + "は5で割り切れる数字です"); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
▼以下は、設定ファイルです。
#Log4J 3章 実習課題1 log4j.logger.tripleLogger= DEBUG,tripleAppender log4j.logger.fifthLogger= INFO,fifthAppender log4j.appender.tripleAppender = org.apache.log4j.DailyRollingFileAppender log4j.appender.tripleAppender.File = Triple.log log4j.appender.tripleAppender.DatePattern='.'yyyy-MM-dd-HH-mm log4j.appender.fifthAppender = org.apache.log4j.RollingFileAppender log4j.appender.fifthAppender.File = Fifth.log log4j.appender.fifthAppender.MaxFileSize = 1KB log4j.appender.fifthAppender.MaxBackupIndex = 3 log4j.appender.tripleAppender.layout=org.apache.log4j.PatternLayout log4j.appender.tripleAppender.layout.ConversionPattern=%d [%t] %-5p %c - %m%n log4j.appender.fifthAppender.layout=org.apache.log4j.PatternLayout log4j.appender.fifthAppender.layout.ConversionPattern=%d [%t] %-5p %c - %m%n