[Ultramonkey-l7-develop 126] Log高度化におけるログ出力の埋め込み方法について

Back to archive index

高丸 明 takam****@yes*****
2008年 1月 21日 (月) 16:34:39 JST


UltraMonkey-L7 Develop の皆様

高丸です。

Log高度化におきまして、新しいLoggerの使用方法について
ソースの具体的な記述方法をまとめましたので、
ご確認をお願いします。

1.ログ埋め込みについて

 a.デバッグログ、デバッグログ以外とも共通
  ・ログが長くなる場合も改行コードは入れず、1行で出力します。

 b.デバッグログ
  ・関数に入った時の引数、関数から出る時の返り値は必ず出力する。
  ・デバッグログに関しては、文字列生成コストを避けるため、必ず最初に
  ログレベルの確認を行う。

  以下のサンプルのような埋め込み方になるかと思います。

int foo(struct l7vs_service* srv, int count) {
    char srv_str[LOGGER_MAX_BUF_SIZE];

    if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
        l7vs_service_c_str(srv_str, srv);
        LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,
            0, "in_function:int foo(struct l7vs_service* srv, struct
l7vs_dest* dest):srv=%s:count=%d",
            srv_str, count);
    }
    ・
    ・
    処理
    ・
    ・
    if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
        LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,
            0, "out_function:int foo(struct l7vs_service* srv, struct
l7vs_dest* dest):return_value=%d",
            ret);
    }
    return ret;
}

 c.デバッグログ以外
  ・ログレベルの判定はLogger側で行うため、事前に判定する必要は
   ありません。

  以下のサンプルのような埋め込み方になるかと思います。

int bar() {

    LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_NETWORK,
        0, "Added VirtualService");
    }
}

2.構造体の文字列化に関して

 debugログで関数に入った時の引数、関数から戻るときの返り値を
 出力しますが、その際の構造体の文字列化に関して、
 構造体を定義しているモジュールに文字列化関数を定義して
 使いまわせるようにしたほうがよろしいかと思います。
 以下のように標準化したいと思いますがいかがでしょうか?

void l7vs_構造体名_c_str(char* ret, const struct l7vs_構造体名* s) {

}

 文字列のメモリは呼び出し側で確保。
 ただし、確保するサイズは以下の名称でLogger側に定義しておきます。

 #define LOGGER_MAX_BUF_SIZE 4096
 ※service構造体などかなり大きくなりそうなため、
 余裕を持たせておきます。


以上、新Loggerの使用方法、構造体文字列化の共通処理につきまして、
ご意見等ありましたら宜しくお願いいたします。




Ultramonkey-l7-develop メーリングリストの案内
Back to archive index