1.2.6 メッセージログの出力(ee_log_〜)(C言語)
(1) ee_logprint_user
- 名称
-
ユーザメッセージログの出力
- 形式
-
ANSI C,C++の形式
#include <eelog.h> int ee_logprint_user(char *msgid,char *pgm_id, char *string,char *info, EELONG stdflags, EELONG flags);
- 機能
-
引数に設定した文字列に,TP1/EEで行ヘッダ,メッセージID,要求元プログラムIDを付けて,メッセージログファイル,標準出力,syslogに出力します。メッセージログファイルの行ヘッダは,プロセスID,メッセージ通番,サービス名称,中央処理通番,年月日,時刻です。標準出力,syslogの行ヘッダは定義で設定します。syslog出力は,flagsに設定した出力レベルが定義に指定した出力レベルと同じか高い場合です。flagsに出力レベルを設定しなかった場合の出力レベルは,1です。
メッセージテキストに復改文字「\n」を含むメッセージログは,メッセージログファイル,syslogへの出力時,1行で出力されます。標準出力への出力時は,復改文字「\n」はそのまま出力されます。
障害が起こってUAPからメッセージログが出力できない場合でも,ee_logprint_user関数がEE_OKで正常に終了することがあります。そのためメッセージログが抜ける場合がありますが,メッセージログの抜けはメッセージログに付けるメッセージログ通番で確認できます。
1つのスレッドから複数回ee_logprint_user関数を呼び出した場合は,メッセージログファイルへの出力順序は保証されます。ただし,複数のスレッドから別々にee_logprint_user関数を呼び出した場合は,呼び出した順にメッセージログファイルに出力されない場合があります。
エラーを検出した場合,TP1/EEはエラーの原因を示すメッセージログにee_logprint_user関数に指定したメッセージを付けて,標準エラー出力に出力します。
UAPから値を設定する引数
- msgid
-
メッセージログごとに付けられる識別子(メッセージID)を設定します。1〜11バイトの文字列(文字列中に半角スペース指定不可)を指定します。最後にヌル文字を付けて設定します。
TP1/EEや他製品と重複した識別子を指定しないでください。
- pgm_id
-
ee_logprint_user関数を呼び出したUAPを識別する値(要求元プログラムID)を,ユーザ任意で設定します。英数字0〜2文字で,最後はヌル文字で終わらせて設定します。
- string
-
メッセージログファイルにメッセージログとして出力したい任意の文字列を設定します。最大800バイトで,最後はヌル文字で終わらせて設定します。
メッセージ内にマルチバイト文字を指定した場合は,800文字未満となります。
- info
-
NULLを設定します。
- stdflags
-
次のフラグを設定します。
フラグ値
意味
EENOFLAGS
メッセージを標準出力に出力しません。
EELOG_FLAG_STDOUT_PRINT
メッセージを標準出力に出力します。
- flags
-
次のフラグを設定します。
フラグ値
意味
EENOFLAGS
なし。syslog出力レベルはデフォルトの1になります。
EELOG_FLAG_SYSLOG_L1
syslog出力レベルを1にします。
EELOG_FLAG_SYSLOG_L2
syslog出力レベルを2にします。
EELOG_FLAG_SYSLOG_L3
syslog出力レベルを3にします。
EELOG_FLAG_SYSLOG_L4
syslog出力レベルを4にします。
EELOG_FLAG_SYSLOG_L5
syslog出力レベルを5にします。
EELOG_FLAG_SYSLOG_L6
syslog出力レベルを6にします。
EELOG_FLAG_SYSLOG_NOPRINT
メッセージをsyslogに出力しません。
syslog出力レベルは,1が最も高く,6が最も低くなります。
- リターン値
-
リターン値
意味
EE_OK
正常に終了しました。
EECOMER_ENVIRON
TP1/EEの環境下にありません。
EECOMER_CNDUOC
UOCから発行しているため,本機能は使用できません。
EELOGER_ARGUMENT
引数に設定した値が間違っています。
EELOGER_EXCLOCK
メッセージログ機能内の排他設定に失敗しました。
EELOGER_EXCUNLOCK
メッセージログ機能内の排他解除に失敗しました。
EELOGER_SNPRINTF
メッセージの組み立てに失敗しました。
EELOGER_CONDITION
メッセージの出力できる状態にありません。
TP1/FSPの環境下にありません。
EELOGER_STDERR
標準エラー出力に失敗しました。
EELOGER_FILEOUT
ログファイルへの出力に失敗しました。
EELOGER_FILE_OVER
すべてのログファイル切り替えに失敗しました。
EELOGER_SYSLOG
syslogへの出力に失敗しました。
- 注意事項
-
-
ログ出力量が多い場合は,ee_logprint_user関数のリターンが遅くなります。例えば,障害発生時にメッセージ出力量が非常に多くなると,トランザクション処理時間が延びてしまいます。
これはスローダウンの要因になりますので,注意してください。
-
環境変数LANGにOS設定値と異なる言語種別を指定し,ee_logprint_user関数でsyslogに非ASCII文字を含むメッセージを出力する場合,syslogに複数の文字コードが混在するおそれがあります。
この場合は次の方法で回避してください。
・出力メッセージをASCII文字だけにします。
・flagsにEELOG_FLAG_SYSLOG_NOPRINTを指定します。
・拡張SYSLOGを使用し,log_hsyslog_cmodeオペランドにSJISを指定します(出力メッセージがシフトJISかつOSの言語設定がUTF-8の場合だけ)。
-
(2) ee_log_dctmsg
- 名称
-
メッセージの出力抑止
- 形式
-
ANSI C,C++の形式
#include <eelog.h> int ee_log_dctmsg(char *msgid, EELONG flags);
- 機能
-
引数で指定したメッセージIDのメッセージの出力を抑止します。
抑止対象としたメッセージは,メッセージログファイル,標準出力(標準エラー出力),syslogへの出力を行いません。
UAPから値を設定する引数
- msgid
-
抑止対象のメッセージIDを設定します。「KFSBn1n2n3n4n5」の形式(9文字)で,最後にヌル文字を付けて設定します。TP1/EEが出力するメッセージIDを設定します。
ee_logprint_user()で指定するメッセージは,抑止対象にはなりません。また,システムで出力する一部のメッセージ,コマンドプロセスで出力するメッセージは抑止対象とはなりません。
- flags
-
EENOFLAGSを設定します。
- リターン値
-
リターン値
意味
EE_OK
正常に終了しました。
EECOMER_ENVIRON
TP1/EEの環境下にありません。
EECOMER_CNDUOC
UOCから発行しているため,本機能は使用できません。
EELOGER_ARGUMENT
引数に設定した値が間違っています。
抑止対象にできないメッセージIDを指定しています。
EELOGER_CONDITION
発行条件が不正です。
TP1/FSPの環境下にありません。
メッセージ出力抑止機能が有効になっていません。
- 注意事項
-
-
メッセージの出力抑止状態は,システム再開始後引き継がれません。必要に応じてメッセージの抑止を再設定してください。
-
(3) ee_log_actmsg
- 名称
-
メッセージの出力抑止解除
- 形式
-
ANSI C,C++の形式
#include <eelog.h> int ee_log_actmsg(char *msgid, EELONG flags);
- 機能
-
引数で指定したメッセージID,またはすべてのメッセージの出力抑止を解除します。
UAPから値を設定する引数
- msgid
-
抑止解除対象のメッセージIDを設定します。設定方法はee_log_dctmsg()を参照してください。
すべてのメッセージの出力抑止を解除する場合,メッセージIDを指定しないでください(先頭をヌル文字にしてください)。
- flags
-
EENOFLAGSを設定します。
- リターン値
-
リターン値
意味
EE_OK
正常に終了しました。
EECOMER_ENVIRON
TP1/EEの環境下にありません。
EECOMER_CNDUOC
UOCから発行しているため,本機能は使用できません。
EELOGER_ARGUMENT
引数に設定した値が間違っています。
抑止解除対象にできないメッセージIDを指定しています。
EELOGER_CONDITION
発行条件が不正です。
TP1/FSPの環境下にありません。
メッセージ出力抑止機能が有効になっていません。