Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Server Base Enterprise Option プログラム作成の手引


ee_logprint

〈このページの構成〉

名称

メッセージログの出力

形式

ANSI C,C++の形式

#include <eelog.h>
int  ee_logprint(char *msgid,char *pgm_id, char *string,char *info,
                 EELONG flags)

機能

引数に設定した文字列に,行ヘッダ,メッセージID,および要求元プログラムIDを付けて,メッセージログファイル,syslog,標準出力に出力します。メッセージログファイルの行ヘッダは,プロセスID,メッセージ通番,サービス名,中央処理通番,年月日,時刻です。syslogの行ヘッダは定義で設定します。syslog出力は,flagsに設定した出力レベルが定義に指定した出力レベルと同じか高い場合です。flagsに出力レベルを設定しなかった場合の出力レベルは,1です。

標準出力への出力有無は,次の表のようになります。定義:log_usermsg_consoleにallを指定している場合,flagsに設定する標準出力への出力フラグの設定に関係なく,標準出力へ出力します。

定義:

log_msg_console

定義:

log_usermsg_console

API:flags

標準出力への出力フラグの設定

標準出力への出力有無

Y(デフォルト)

all

有り

無し(デフォルト)

api(デフォルト)

有り

無し(デフォルト)

×

N

×

(凡例)

○:メッセージを標準出力に出力します。

×:メッセージを標準出力に出力しません。

−:該当しません。

TP1/EEでは,ee_logprint関数で使うメッセージID用に,05000から06999までの範囲の番号を割り当てています。UAPから出力するメッセージIDの番号には,05000から06999までの範囲の値を付けてください。

メッセージテキストに復改文字「\n」を含むメッセージログは,次のように扱います。

メッセージの出力先

復改文字「¥n」の扱い

メッセージログファイル

空白に置き換えて1行で出力する

syslog

空白に置き換えて1行で出力する

標準出力

そのまま出力する(「\n」で改行する)

障害が発生してUAPからメッセージログが出力できない場合でも,ee_logprint関数がリターン値EE_OKで正常に終了することがあります。そのため,メッセージログが抜ける場合があります。メッセージログの抜けは,メッセージログに付けるメッセージログ通番で確認できます。

一つのスレッドから複数回ee_logprint関数を呼び出した場合,メッセージログファイルへの出力順序は保証されます。複数のスレッドから別々にee_logprint関数を呼び出した場合は,呼び出した順にメッセージログファイルに出力されないことがあります。

エラーを検出した場合,エラーの原因を示すメッセージログにee_logprint関数に指定したメッセージを付けて,標準エラー出力に出力します。

UAPで値を設定する引数

●msgid

メッセージログごとに付ける識別子(メッセージID)を設定します。「KFSBnnnnn-x」の形式(11文字)で,末尾にNULL文字を付けてください。

TP1/EEでは,ee_logprint関数で使うメッセージIDの通番(nnnnnの部分)用に,05000〜06999の範囲の番号を割り当てています。UAPから出力するメッセージIDの通番は,05000〜06999の範囲の値にしてください。

●pgm_id

ee_logprint関数を呼び出したUAPを識別する任意の値(要求元プログラムID)を設定します。英数字2文字で,末尾にNULL文字を付けてください。

●string

メッセージログファイルにメッセージログとして出力したい任意の文字列を設定します。最大222文字で,末尾にNULL文字を付けてください。

文字列に改行「\n」が含まれる場合,1行で出力されます。

●info

NULLを設定します。

●flags

syslog出力レベルと標準出力への出力フラグを設定します。

syslog出力レベルだけを設定する場合

syslog出力レベルを表す次のフラグを設定します。

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が最も低くなります。flagsに設定した出力レベルがメッセージログ関連定義のlog_syslog_outオペランドに指定した出力レベルと同じか高い場合,syslogにメッセージログが出力されます。flagsに出力レベルを設定しなかった場合の出力レベルは1です。

syslog出力レベルと標準出力への出力フラグを設定する場合

syslog出力レベルフラグとの論理和で設定します。

EELOG_FLAG_CONSOLE

メッセージを標準出力に出力します。

リターン値

リターン値

意味

EE_OK

正常に終了しました。

EECOMER_CNDUOC

UOCから発行しているため,この機能は使用できません。

EECOMER_ENVIRON

TP1/EEの環境下にありません。

EELOGER_ARGUMENT

引数に設定した値が間違っています。

EELOGER_CONDITION

メッセージを出力できる状態にありません。

EELOGER_EXCLOCK

メッセージログ機能内の排他設定に失敗しました。

EELOGER_EXCUNLOCK

メッセージログ機能内の排他解除に失敗しました。

EELOGER_FILE_OVER

すべてのメッセージログファイル切り替えに失敗しました。

EELOGER_FILEOUT

メッセージログファイルへの出力に失敗しました。

EELOGER_SNPRINTF

メッセージの組み立てに失敗しました。

EELOGER_STDERR

標準エラー出力に失敗しました。

EELOGER_SYSLOG

syslogへの出力に失敗しました。

注意事項

  1. ログ出力量が多い場合は,ee_logprint関数のリターンが遅くなります。例えば,障害発生時にメッセージ出力量が著しく多くなると,トランザクション処理時間が長くなります。これはスローダウンの要因になるので,注意してください。

  2. ee_logprint関数で標準出力に非ASCII文字を含むメッセージを出力する場合,標準出力に複数の文字コードが混在する可能性があります。この場合は次のどちらかの方法で回避してください。

    • 出力メッセージをASCII文字だけにする

    • flagsにEELOG_FLAG_CONSOLEを指定しない