From takamaru.akira @ yes.nttcom.ne.jp Mon Jan 21 16:34:39 2008 From: takamaru.akira @ yes.nttcom.ne.jp (=?ISO-2022-JP?B?GyRCOWI0XSEhTEAbKEI=?=) Date: Mon, 21 Jan 2008 16:34:39 +0900 Subject: [Ultramonkey-l7-develop 126] =?iso-2022-jp?b?TG9nGyRCOWJFWTI9JEskKiQxJGslbSUwPVBOTyROS2QbKEI=?= =?iso-2022-jp?b?GyRCJGE5fiRfSn1LISRLJEQkJCRGGyhC?= Message-ID: <47944B0F.8000609@yes.nttcom.ne.jp> 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の使用方法、構造体文字列化の共通処理につきまして、 ご意見等ありましたら宜しくお願いいたします。 From takamaru.akira @ yes.nttcom.ne.jp Mon Jan 21 16:34:46 2008 From: takamaru.akira @ yes.nttcom.ne.jp (=?ISO-2022-JP?B?GyRCOWI0XSEhTEAbKEI=?=) Date: Mon, 21 Jan 2008 16:34:46 +0900 Subject: [Ultramonkey-l7-develop 127] =?iso-2022-jp?b?TG9nGyRCJE45YkVZMj0kSyQqJDEkaxsoQkxvZxskQj1QGyhC?= =?iso-2022-jp?b?GyRCTk87fiROGyhCTWVzc2FnZV9pZBskQiRLJEQkJCRGGyhC?= Message-ID: <47944B16.7060102@yes.nttcom.ne.jp> UltraMonkey-L7 Develop の皆様 高丸です。 Logの高度化にあたり各Logメッセージの特定をしやすくするため、 Message_idを付与することを考えております。 以下がLoggerのMessage_id付与案です。 全体で11桁の文字列とし、 1-3桁目=プロセス識別(3桁) 4桁目=ログレベル(1桁) 5-7桁目=カテゴリ(3桁) 8-11桁目=ログレベル+カテゴリ内での連番(4桁) プロセス識別、ログレベルとカテゴリの値は以下になります。 プロセス識別 負荷分散プロセス=VSD UltraMonkey設定ツール=ADM SNMPAgent=SNM ログレベル DEBUG=1 INGO=2 WARN=3 ERROR=4 FATAL=5 カテゴリ Network情報=1 Network情報_帯域情報=2 Network情報_コネクション数=3 Network情報_QoS=4 VirtualService情報=5 RealServer情報=6 RealServerj情報_振分情報=7 SorryServer情報=8 Replication情報=9 UltraMonkey-L7起動/停止 情報=10 例:VSD40010005 負荷分散プロセスのネットワーク情報のERRORメッセージの5番目 -- Logger組み込み時のmessage_id指定方法: Loggerの関数のmessage_id引数に渡す値は連番のみとなります。 先頭から1-3桁目のプロセス識別はLoggerのプリプロセス時にマクロを 指定し、そのプロセスに特化したLoggerとするため、Logger側で付与できます。 4-7桁目はどのログ出力関数が呼ばれたかと 渡されたカテゴリから判断してLoggerが付与します。 連番に関しては歯抜け、重複を防ぐため、すべてのログの埋め込みが 終了してから、ログレベル/カテゴリ毎にソートして機械的に振り、 ソースに反映させるようにしたいと思います。 そのため、埋め込み作業中は仮の値として「0」を 指定しておくこととしたいと思います。 以上、Message_idの付与につきまして、ご意見等ありましたら 宜しくお願いいたします。