目次へ

解答例 - 実習課題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

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp