Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Financial Service Platform プログラム作成の手引


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への出力に失敗しました。

注意事項
  1. ログ出力量が多い場合は,ee_logprint_user関数のリターンが遅くなります。例えば,障害発生時にメッセージ出力量が非常に多くなると,トランザクション処理時間が延びてしまいます。

    これはスローダウンの要因になりますので,注意してください。

  2. 環境変数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の環境下にありません。

メッセージ出力抑止機能が有効になっていません。

注意事項
  1. メッセージの出力抑止状態は,システム再開始後引き継がれません。必要に応じてメッセージの抑止を再設定してください。

(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の環境下にありません。

メッセージ出力抑止機能が有効になっていません。