top / index / prev / next / target / source

2008-11-05 diary: ログメッセージ定義書からロギング・ソースコードを自動生成する blancoLogMessage を新規作成

いがぴょん画像(小) 日記形式でつづる いがぴょんコラム ウェブページです。

old-v2

ログメッセージ定義書からロギング・ソースコードを自動生成する blancoLogMessage を新規作成

ログメッセージ定義書という Excel ブックから、ロギング・ソースコードを自動生成する blancoLogMessage というプロダクトを新規作成しました。

ログメッセージ定義書からロギング・ソースコードを自動生成する blancoLogMessage を新規作成

blanco Frameworkのロギング関連プロジェクトとして、ログメッセージ定義書という Excel ブックから、ロギング・ソースコードを自動生成するblancoLogMessage というプロダクトを新規作成しました。かねてよりロギング周りを Excel ブックから生成する実装の必要性/重要性を痛感していました。このプロダクトがロギングにまつわるプログラミングの劇的な改善をもたらすことを期待します。※現在、仕様の調整中のフェーズで、開発版と位置づけます。ここ数日中にフィードバックを頂ければ、仕様に反映させることができる可能性があります。

blancoLogMessgae を利用すると、以下のような Excel ブックの記載から ロギングのためのソースコードを自動生成することができます。

N/A

自動生成されたソースコードは、以下のような記述によって利用することができます。 利用例 その1

        new Sample2LogMessage().logMessage002("置換文字列");
        new Sample2LogMessage().logMessage001(new IllegalArgumentException("例外の例"));

実際に生成されるソースコードは、以下のようになります。

/*
 * このソースコードは blanco Frameworkによって自動生成されています。
 */
package blanco.sample.logmessage;

import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * ログメッセージのサンプル。このクラスは単にサンプルです。実際の動作には利用されません。
 */
public class Sample2LogMessage {
    /**
     * ログメッセージをプロパティファイル対応させるための内部的に利用するリソースバンドルクラス。
     */
    protected final Sample2LogMessageResourceBundle fBundle = new Sample2LogMessageResourceBundle();

    /**
     * ログメッセージ定義ID[Sample2]、レベル[FATAL]、キー[MESSAGE001]の文字列をロギングします。
     *
     * No.1:
     * 文字列[メッセージのサンプル。その1。]
     */
    public void logMessage001() {
        Logger.getLogger("blanco.sample.logmessage").log(Level.SEVERE, "[MESSAGE001] fatal: " + fBundle.getMessage001());
    }

    /**
     * ログメッセージ定義ID[Sample2]、レベル[FATAL]、キー[MESSAGE001]の文字列をロギングします。
     *
     * No.1:
     * 文字列[メッセージのサンプル。その1。]
     *
     * @param argThrown 例外。
     */
    public void logMessage001(final Throwable argThrown) {
        Logger.getLogger("blanco.sample.logmessage").log(Level.SEVERE, "[MESSAGE001] fatal: " + fBundle.getMessage001(), argThrown);
    }

    /**
     * ログメッセージ定義ID[Sample2]、レベル[ERROR]、キー[MESSAGE002]の文字列をロギングします。
     *
     * No.2:
     * 文字列[メッセージ置換文字[{0}]が置換されます。]
     *
     * @param arg0 置換文字列{0}の値。
     */
    public void logMessage002(final String arg0) {
        Logger.getLogger("blanco.sample.logmessage").log(Level.SEVERE, "[MESSAGE002] " + fBundle.getMessage002(arg0));
    }

    /**
     * ログメッセージ定義ID[Sample2]、レベル[ERROR]、キー[MESSAGE002]の文字列をロギングします。
     *
     * No.2:
     * 文字列[メッセージ置換文字[{0}]が置換されます。]
     *
     * @param arg0 置換文字列{0}の値。
     * @param argThrown 例外。
     */
    public void logMessage002(final String arg0, final Throwable argThrown) {
        Logger.getLogger("blanco.sample.logmessage").log(Level.SEVERE, "[MESSAGE002] " + fBundle.getMessage002(arg0), argThrown);
    }

    /**
     * ログメッセージ定義ID[Sample2]、レベル[WARN]、キー[MESSAGE003]の文字列をロギングします。
     *
     * No.3:
     * 文字列[メッセージ置換文字[{0}]に加え、もうひとつ[{1}]が置換されます。]
     *
     * @param arg0 置換文字列{0}の値。
     * @param arg1 置換文字列{1}の値。
     */
    public void logMessage003(final String arg0, final String arg1) {
        Logger.getLogger("blanco.sample.logmessage").log(Level.WARNING, "[MESSAGE003] " + fBundle.getMessage003(arg0, arg1));
    }

    /**
     * ログメッセージ定義ID[Sample2]、レベル[WARN]、キー[MESSAGE003]の文字列をロギングします。
     *
     * No.3:
     * 文字列[メッセージ置換文字[{0}]に加え、もうひとつ[{1}]が置換されます。]
     *
     * @param arg0 置換文字列{0}の値。
     * @param arg1 置換文字列{1}の値。
     * @param argThrown 例外。
     */
    public void logMessage003(final String arg0, final String arg1, final Throwable argThrown) {
        Logger.getLogger("blanco.sample.logmessage").log(Level.WARNING, "[MESSAGE003] " + fBundle.getMessage003(arg0, arg1), argThrown);
    }…以下略…

ちなみに、以下の Web記事のおかげで、ずっとペンディングしていた blancoLogMessage 開発に着手することができました。※とはいえ、blancoLogMessage が、これらの Web記事・Web日記に記載されている課題を解決できるかどうかは別の問題です。(私の感覚的には、これらは同じ課題ものなのですけれども…)


この日記について