高丸 明
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の使用方法、構造体文字列化の共通処理につきまして、 ご意見等ありましたら宜しくお願いいたします。