以下に、本願の開示するログ制御方法、ログ制御プログラムおよびログ制御装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
図1は、実施例1に係るシステムの全体構成例を示す図である。図1に示すように、このシステムは、一例として、ネットバンキングシステムを図示したが、これに限定されるものではなく、様々な情報処理システムに適用できる。
このシステムは、複数のクライアント端末5と銀行センター100とを有する。各クライアント端末5と銀行センター100とは、ネットワーク6を介して接続される。各クライアント端末5は、インターネットなどのネットワーク通信可能な端末であり、例えばパーソナルコンピュータ、携帯端末、スマートフォンである。
銀行センター100は、ログ制御装置10と勘定系ホスト50とを有し、クライアント端末5から受信した各種取引を実行する。勘定系ホスト50は、ログ制御装置10を介して、クライアント端末5が要求した取引を受信して実行し、ログ制御装置10を介して実行結果を応答する。
ログ制御装置10は、クライアント端末5から受信した各種取引を勘定系ホスト50に出力し、勘定系ホスト50から処理結果を受信してクライアント端末5に応答するサーバなどの装置である。このログ制御装置10は、各種取引や処理に関するログを出力する。
このようなログ制御装置10は、実行が開始されたスレッドに第1のフラグを対応付ける。そして、ログ制御装置10は、スレッドの実行が開始された開始時刻が第1のフラグと対応付けられる第1の基準時刻を超えない場合、第1の基準時刻に対応する第1のログファイルに、スレッドに関するログを出力する。一方、ログ制御装置10は、開始時刻が第1の基準時刻を超える場合、第2の基準時刻に対応する第2のログファイルに、ログを出力する。
例えば、ログ制御装置10は、スレッドの実行を開始すると、当該スレッドにフラグを設定する。そして、ログ制御装置10は、フラグに対応する基準時刻とスレッドの開始時刻とを比較し、開始時刻が基準時刻前にあれば、ロガーAを用いてログファイルAにログを出力する。一方、ログ制御装置10は、開始時刻が基準時刻を超えていれば、ロガーBを用いてログファイルBにログを出力する。
このように、ログ制御装置10は、日毎にロガーを切替える際、スレッドの実行開始時に割当てたフラグで決定される時刻で切替判定するので、スレッドが日を跨いで実行されても、実行開始時の時刻で判定でき、同日ファイルにログ出力できる。したがって、ログ制御装置10は、ログ出力に伴う不整合の発生を抑制することができる。
図2は、実施例1に係るログ制御装置の機能構成を示す機能ブロック図である。図2に示すように、ログ制御装置10は、通信制御部11、記憶部12、制御部20を有する。
通信制御部11は、他の装置の通信を制御する処理部であり、例えばネットワークインタフェースカードなどである。例えば、通信制御部11は、クライアント端末5から取引などの要求を受信し、取引結果などを送信する。
記憶部12は、各種プログラムやデータを記憶するハードディスクや半導体メモリなどの記憶装置であり、ローカルフラグテーブル13、グローバルフラグテーブル14、切替時刻テーブル15、ログファイルA16、ログファイルB17を記憶する。
ローカルフラグテーブル13は、スレッドごとに、スレッドに割当てたローカルフラグの値を記憶する。図3は、ローカルフラグテーブルに記憶される情報の例を示す図である。図3に示すように、ローカルフラグテーブル13は、「スレッド名、フラグ」を対応付けて記憶する。
「スレッド名」は、スレッドを特定する情報であり、例えばスレッドの名称などが設定される。フラグは、ローカルフラグの値が設定される。図3では、スレッド1にはフラグAが対応付けられており、スレッド2にはフラグBが対応付けられている例を示している。
グローバルフラグテーブル14は、各スレッドが共通に参照する共有フラグであるグローバルフラグの値を記憶する。例えば、グローバルフラグテーブル14は、「グローバルフラグ、フラグA」などを記憶する。
切替時刻テーブル15は、ログファイルを切替えるタイミングを示す各切替時刻の値を記憶する。例えば、切替時刻テーブル15は、フラグAに対応する切替時刻Aを「2013年11月22日12:00」と記憶し、フラグBに対応する切替時刻Bを「2013年11月23日12:00」と記憶する。
ログファイルA16は、ロガーAの出力先となるログファイルであり、日毎にログを記憶する。例えば、ログファイルA16は、奇数日に実行されたスレッドのログを日毎に記憶する。ログファイルB17は、ロガーBの出力先となるログファイルであり、日毎にログを記憶する。例えば、ログファイルB17は、偶数日に実行されたスレッドのログを日毎に記憶する。
制御部20は、ログ制御装置10全体を司る処理日であり、例えばプロセッサなどである。この制御部20は、スレッド実行部21、ローカル処理部22、グローバル比較部23、更新部24、ログ出力部25を有する。なお、これらの処理部は、電子回路の一部やプロセッサが実行するプロセスの一部である。
スレッド実行部21は、スレッドを実行する処理部である。具体的には、スレッド実行部21は、クライアント端末5から各種取引などの要求を受信すると、当該要求に対応するスレッドを実行する。
ローカル処理部22は、ローカル設定部22aとローカル比較部22bとを有し、これらによってローカルフラグを用いた各種処理を実行する処理部である。
ローカル設定部22aは、実行が開始されたスレッドにローカルフラグを設定する処理部である。具体的には、ローカル設定部22aは、スレッドが開始されると、グローバルフラグテーブル14からグローバルフラグの値を取得する。そして、ローカル設定部22aは、実行されたスレッドの名称と、グローバルフラグの値が設定されたローカルフラグとを対応付けて、ローカルフラグテーブル13に格納する。なお、ローカル設定部22aは、対応付け部の一例である。
ローカル比較部22bは、スレッドの開始時刻と、ローカルフラグに対応付けられる切替時刻とを比較する処理部である。例えば、ローカル比較部22bは、スレッド1と対応付けられるローカルフラグ「フラグA」をローカルフラグテーブル13から特定する。そして、ローカル比較部22bは、スレッド1の開始時刻と、フラグAに対応する切替時刻Aとを比較する。
比較した結果、ローカル比較部22bは、スレッド1の開始時刻が切替時刻A以内であれば、ログ出力部25に対して、スレッド1のログをロガーAで出力することを指示する。一方、ローカル比較部22bは、スレッド1の開始時刻が切替時刻A以降であれば、グローバル比較部23に対して、スレッド1に対するグローバルフラグによる切替判定の処理を依頼する。
グローバル比較部23は、グローバルアドレスに対応する切替時刻と、スレッドの開始時刻とを比較する処理部である。具体的には、グローバル比較部23は、ローカルフラグを用いた切替判定によって切替時刻を超過すると判定されたスレッドに対して、グローバルアドレスを用いた切替判定を実行する。
例えば、グローバル比較部23は、スレッド1についてグローバルフラグによる切替判定の処理依頼を受信すると、グローバルフラグテーブル14からグローバルフラグ「フラグA」を取得する。そして、グローバル比較部23は、スレッド1の開始時刻と、フラグAに対応する切替時刻Aとを比較する。
比較した結果、グローバル比較部23は、スレッド1の開始時刻が切替時刻A以内であれば、ログ出力部25に対して、切替時刻Aに対応するロガーAでスレッド1のログを出力することを指示する。
一方で、グローバル比較部23は、スレッド1の開始時刻が切替時刻A以降であれば、更新部24に対して、グローバルフラグの更新を依頼する。さらに、グローバル比較部23は、更新部24に対して、他方の切替時刻Bの更新を依頼する。
ここで、グローバル比較部23がグローバルフラグを用いた比較処理を実行するのは、グローバルフラグが他のスレッドによって更新されていないかを検出するためのものである。このような判定を行うことで、グローバルフラグが複数のスレッドによって同タイミングで別々に更新されることを抑制する。
更新部24は、ローカルフラグ、グローバルフラグ、切替時刻を更新する処理部である。具体的には、更新部24は、グローバルフラグによる切替判定によって切替時刻を超過すると判定された場合、グローバルフラグおよび切替時刻を更新し、ロガーを切替えることで、ログファイルを切替える。
例えば、更新部24は、グローバル比較部23から切替時刻Bの更新依頼を受信すると、切替時刻Bを切替時刻Aの24時間後に変更する。また、更新部24は、切替時刻Bを更新した場合、グローバルフラグテーブル14に記憶されるグローバルフラグ「フラグA」を、切替時刻Bに対応する「フラグB」に更新する。さらに、更新部24は、グローバルフラグによる判定契機となったスレッドのローカルフラグ「フラグA」を、更新後のグローバルフラグの値「フラグB」に更新する。
図4を用いて一例を説明する。図4は、グローバルフラグと切替時刻の遷移を説明する図である。図4に示すように、更新部24は、スレッド1の開始時刻が切替時刻A「2013年11月22日12:00」を超過すると判定された場合、切替時刻Bを切替時刻Aの24時間後である「2013年11月23日12:00」に更新する。さらに、更新部24は、グローバルフラグの値を、更新した切替時刻Bに対応するフラグBに更新する。この結果、切替時刻更新後に発生するスレッドのログは、切替時刻Bを用いて切替判定される。
ログ出力部25は、切替時刻ごとのロガーを用いてログ出力を実行する処理部である。なお、ログ出力部25は、出力制御部の一例である。具体的には、ログ出力部25は、日毎に2つのログファイルを切替えてログ出力を実行する。
例えば、ログ出力部25は、切替時刻A以内であればロガーAを用いて、ログファイルA16にログを出力する。また、ログ出力部25は、切替時刻B以内であればロガーBを用いて、ログファイルB17にログを出力する。なお、ログ出力部25は、各ログファイル内で日毎に領域を分けてログ出力する。
次に、ログ制御装置10が実行する処理の流れを説明する。ここでは、具体的な数値例を挙げて説明するが、あくまで一例であり、任意に変更することができる。
図5は、実施例1に係る処理の流れを示すフローチャートである。図5に示すように、スレッドの実行が開始されると(S101:Yes)、ローカル設定部22aは、グローバルフラグテーブル14からグローバルフラグを取得し(S102)、取得したグローバルフラグを実行スレッドのローカルフラグに設定する(S103)。続いて、ローカル設定部22aは、システム情報等から開始時刻を取得する(S104)。
その後、ローカル比較部22bは、対象スレッドの開始時刻がローカルフラグに対応する切替時刻を超過するかを判定する(S105)。ここで、ローカル比較部22bは、対象スレッドの開始時刻がローカルフラグに対応する切替時刻を超過しない場合(S105:No)、ログ出力部25は、実行スレッドのログを、ローカルフラグに対応するロガーで出力する(S106)。
一方、対象スレッドの開始時刻がローカルフラグに対応する切替時刻を超過する場合(S105:Yes)、グローバル比較部23は、グローバルフラグテーブル14からグローバルフラグを取得する(S107)。
続いて、グローバル比較部23は、対象スレッドの開始時刻がグローバルフラグに対応する切替時刻を超過するかを判定する(S108)。ここで、グローバル比較部23は、対象スレッドの開始時刻がグローバルフラグに対応する切替時刻を超過しない場合(S108:No)、ログ出力部25は、対象スレッドのログを、ローカルフラグに対応するロガーで出力する(S106)。
一方、対象スレッドの開始時刻がグローバルフラグに対応する切替時刻を超過する場合(S108:Yes)、更新部24は、もう一方の切替時刻を1日後(24時間後)に更新する(S109)。
さらに、更新部24は、ログ出力部25に対してロガーの更新を指示し(S110)、グローバルフラグテーブル14のグローバルフラグを、更新した切替時刻に対応するフラグに更新する(S111)。
その後、更新部24は、対象スレッドのローカルフラグを、更新した切替時刻に対応するフラグに更新し(S112)、ログ出力部25は、対象スレッドのログを、更新後のローカルフラグに対応するロガーで出力する(S106)。
図6は、実施例1に係るマルチスレッドによるログ切替処理の流れを示すシーケンス図である。図6に示すように、スレッド実行部21は、2013年11月22日11時59分にスレッド2の実行を開始する(S201)。
続いて、ローカル設定部22aは、グローバルフラグテーブル14からグローバルフラグに設定される「フラグA」を取得し(S202とS203)、スレッド2のローカルフラグ2に設定する(S204とS205)。
そして、ローカル比較部22bは、ローカルフラグ2に設定される「フラグA」に対応する切替時刻A「2013年11月22日12時00分」と、スレッド2の開始時刻「2013年11月22日11時59分」とを比較する(S206)。ここで、ローカル設定部22aは、開始時刻が切替時刻Aを超過しないと判定する(S207)。
この結果、ログ出力部25は、スレッド2が出力するログを、ローカルフラグ2に設定される「フラグA」に対応するロガーAを用いてログファイルAに出力し(S208とS209)、出力結果をクライアント端末5や管理装置に応答する(S210)。
その後、スレッド実行部21は、2013年11月22日12時01分にスレッド1の実行を開始する(S211)。すると、ローカル設定部22aは、グローバルフラグに設定される「フラグA」を取得し(S212とS213)、スレッド1のローカルフラグ1に設定する(S214とS215)。
そして、ローカル比較部22bは、ローカルフラグ1に設定される「フラグA」に対応する切替時刻A「2013年11月22日12時00分」と、スレッド1の開始時刻「2013年11月22日12時01分」とを比較する(S216)。ここで、ローカル比較部22bは、開始時刻が切替時刻Aを超過すると判定する(S217)。このとき、グローバル比較部23および更新部24は、グローバルフラグに関する各種処理の排他制御を開始する。
グローバル比較部23は、グローバルフラグテーブル14からグローバルフラグに設定される「フラグA」を取得する(S218とS219)。続いて、グローバル比較部23は、グローバルフラグに設定される「フラグA」に対応する切替時刻A「2013年11月22日12時00分」と、スレッド1の開始時刻「2013年11月22日12時01分」とを比較する(S220)。ここで、グローバル比較部23は、開始時刻が切替時刻Aを超過すると判定する(S221)。
この結果、更新部24は、判定に利用された切替時刻Aと異なるもう一方の切替時刻Bを切替時刻Aの24時間後である「2013年11月23日12時00分」に更新する(S222とS223)。続いて、更新部24は、更新した切替時刻Bに対応するロガーBへの切替指示をログ出力部25に出力する(S224とS225)。
その後、更新部24は、グローバルフラグテーブル14に設定されるグローバルフラグを、時刻を更新した切替時刻Bに対応する「フラグB」に更新する(S226とS227)。このとき、グローバル比較部23および更新部24は、グローバルフラグに関する各種処理の排他制御を解除する。さらに、更新部24は、スレッド1のローカルフラグ1に対しても、グローバルフラグに設定された「フラグB」を設定する(S228とS229)。
この結果、ログ出力部25は、スレッド1が出力するログを、ローカルフラグ1に設定される「フラグB」に対応するロガーBを用いてログファイルBに出力し(S230とS231)、出力結果をクライアント端末5や管理装置に応答する(S232)。
その後、スレッド実行部21は、2013年11月22日12時02分にスレッド2の実行を再度開始する(S233)。すると、ローカル設定部22aは、グローバルフラグテーブル14に設定されるグローバルフラグ「フラグB」を取得し(S234とS235)、スレッド2のローカルフラグ2に設定する(S236とS237)。
そして、ローカル比較部22bは、ローカルフラグ2に設定される「フラグB」に対応する切替時刻B「2013年11月23日12時00分」と、スレッド2の開始時刻「2013年11月22日12時02分」とを比較する(S238)。ここで、ローカル設定部22aは、開始時刻が切替時刻Bを超過しないと判定する(S239)。
この結果、ログ出力部25は、新たに実行されたスレッド2が出力するログを、ローカルフラグ2の「フラグB」に対応するロガーBを用いてログファイルBに出力し(S240とS241)、出力結果をクライアント端末5や管理装置に応答する(S242)。
図7は、スレッド追い越し時におけるログ切替処理の流れを示すシーケンス図である。図7に示すように、スレッド実行部21は、2013年11月22日11時59分にスレッド1の実行を開始する(S301)。
続いて、ローカル設定部22aは、グローバルフラグテーブル14からグローバルフラグに設定される「フラグA」を取得し(S302とS303)、スレッド1のローカルフラグ1に設定する(S304とS305)。
そして、ローカル比較部22bは、ローカルフラグ1に設定される「フラグA」に対応する切替時刻A「2013年11月22日12時00分」と、スレッド1の開始時刻「2013年11月22日11時59分」とを比較する(S306)。ここで、ローカル設定部22aは、開始時刻が切替時刻Aを超過しないと判定する(S307)。
この結果、ログ出力部25は、スレッド1が出力するログを、ローカルフラグ1に設定される「フラグA」に対応するロガーAを用いてログファイルAに出力し(S308とS309)、出力結果をクライアント端末5や管理装置に応答する。
その後、スレッド実行部21は、2013年11月22日11時59分にスレッド2の実行を開始する(S310)。すると、ローカル設定部22aは、グローバルフラグに設定される「フラグA」を取得する(S311とS312)。
一方で、スレッド実行部21は、2013年11月22日12時01分にスレッド1の実行を開始する(S313)。すると、ローカル設定部22aは、グローバルフラグに設定される「フラグA」を取得する(S314とS315)。
そして、ローカル設定部22aは、スレッド2に対して、スレッド2のローカルフラグ2に、グローバルフラグの「フラグA」を設定する(S316とS317)。同様に、ローカル設定部22aは、スレッド1に対して、スレッド1のローカルフラグ1に、グローバルフラグの「フラグA」を設定する(S318とS319)。
続いて、ローカル比較部22bは、スレッド1のローカルフラグ1に設定される「フラグA」に対応する切替時刻A「2013年11月22日12時00分」と、スレッド1の開始時刻「2013年11月22日12時01分」とを比較する(S320)。ここで、ローカル比較部22bは、開始時刻が切替時刻Aを超過すると判定する(S321)。このとき、グローバル比較部23および更新部24は、グローバルフラグに関する各種処理を排他制御を開始する。
そして、切替時間を超過するスレッド1について、グローバル比較部23は、グローバルフラグテーブル14からグローバルフラグに設定される「フラグA」を取得する(S322とS323)。続いて、グローバル比較部23は、グローバルフラグの「フラグA」に対応する切替時刻A「2013年11月22日12時00分」と、スレッド1の開始時刻「2013年11月22日12時01分」とを比較する(S324)。ここで、グローバル比較部23は、開始時刻が切替時刻Aを超過すると判定する(S325)。
この結果、更新部24は、判定に利用された切替時刻Aと異なるもう一方の切替時刻Bを切替時刻Aの24時間後である「2013年11月23日12時00分」に更新する(S326とS327)。続いて、更新部24は、更新した切替時刻Bに対応するロガーBへの切替指示をログ出力部25に出力する(S328とS329)。
その後、更新部24は、グローバルフラグテーブル14に設定されるグローバルフラグを、時刻を更新した切替時刻Bに対応する「フラグB」に更新する(S330とS331)。このとき、グローバル比較部23および更新部24は、グローバルフラグに関する各種処理の排他制御を解除する。
一方で、切替時間を超過しないスレッド2について、S332を実行する。すなわち、ローカル比較部22bは、S310で起動されたスレッド2のローカルフラグ2の「フラグA」に対応する切替時刻A「2013年11月22日12時00分」と、スレッド2の開始時刻「2013年11月22日11時59分」とを比較する。ここで、ローカル設定部22aは、開始時刻が切替時刻Aを超過しないと判定する(S333)。
その一方で、切替時間を超過したスレッド1について、更新部24は、スレッド1の切替処理において、グローバルフラグテーブル14に設定したグローバルフラグの値「フラグB」を、スレッド1のローカルフラグ1に設定する(S334とS335)。なお、スレッド1の切替処理とは、例えば排他制御期間であり、上記S322からS331の処理期間である。この結果、ログ出力部25は、スレッド1が出力するログを、スレッド1のローカルフラグ1に設定される「フラグB」に対応するロガーBを用いてログファイルBに出力し(S336とS337)、出力結果をクライアント端末5や管理装置に応答する(S338)。
また、S320において切替時間を超過しないスレッド2については、ログ出力部25は、スレッド2のローカルフラグ2の「フラグA」に対応するロガーAを用いてログファイルAに出力する(S339とS340)。そして、ログ出力部25は、出力結果をクライアント端末5や管理装置に応答する(S341)。
その後、スレッド実行部21は、2013年11月22日12時02分にスレッド1の実行を再度開始する(S342)。すると、ローカル設定部22aは、グローバルフラグテーブル14からグローバルフラグに設定される「フラグB」を取得し(S343とS344)、スレッド1のローカルフラグ1に設定する(S345とS346)。
そして、ローカル比較部22bは、ローカルフラグ1の「フラグB」に対応する切替時刻B「2013年11月23日12時00分」と、スレッド1の開始時刻「2013年11月22日12時02分」とを比較する(S347)。ここで、ローカル設定部22aは、開始時刻が切替時刻Bを超過しないと判定する(S348)。
この結果、ログ出力部25は、新たに実行されたスレッド1が出力するログを、ローカルフラグ1の「フラグB」に対応するロガーBを用いてログファイルBに出力し(S349とS350)、出力結果をクライアント端末5や管理装置に応答する(S351)。
図8は、ログ切替前に切替時刻を超過するスレッドが複数発生した時のログ切替処理の流れを示すシーケンス図である。図8に示すように、スレッド実行部21は、2013年11月22日11時59分にスレッド2の実行を開始する(S401)。
続いて、ローカル設定部22aは、グローバルフラグテーブル14に設定されるグローバルフラグ「フラグA」を取得し(S402とS403)、スレッド2のローカルフラグ2に設定する(S404とS405)。
そして、ローカル比較部22bは、ローカルフラグ2の「フラグA」に対応する切替時刻A「2013年11月22日12時00分」と、スレッド2の開始時刻「2013年11月22日11時59分」とを比較する(S406)。ここで、ローカル設定部22aは、開始時刻が切替時刻Aを超過しないと判定する(S407)。
この結果、ログ出力部25は、スレッド2が出力するログを、ローカルフラグ2の「フラグA」に対応するロガーAを用いてログファイルAに出力し(S408とS409)、出力結果をクライアント端末5や管理装置に応答する。
その後、スレッド実行部21は、2013年11月22日12時01分にスレッド1の実行を開始し(S410)、2013年11月22日12時02分にスレッド2の実行を開始する(S411)。
続いて、ローカル設定部22aは、スレッド1に対して、グローバルフラグに設定される「フラグA」を取得し(S412とS413)、同様に、スレッド2に対して、グローバルフラグに設定される「フラグA」を取得する(S414とS415)。
そして、ローカル設定部22aは、スレッド1に対して、スレッド1のローカルフラグ1に、グローバルフラグの「フラグA」を設定する(S416とS417)。同様に、ローカル設定部22aは、スレッド2に対して、スレッド2のローカルフラグ2に、グローバルフラグの「フラグA」を設定する(S418とS419)。
その後、スレッド1に対して、ローカル比較部22bは、S420を実行する。すなわち、ローカル比較部22bは、スレッド1のローカルフラグ1の「フラグA」に対応する切替時刻A「2013年11月22日12時00分」と、スレッド1の開始時刻「2013年11月22日12時01分」とを比較する。ここで、ローカル比較部22bは、スレッド1に対して、開始時刻が切替時刻Aを超過すると判定する(S421)。
同様に、スレッド2に対して、ローカル比較部22bは、S422を実行する。すなわち、ローカル比較部22bは、スレッド2のローカルフラグ1の「フラグA」に対応する切替時刻A「2013年11月22日12時00分」と、スレッド2の開始時刻「2013年11月22日12時02分」とを比較する。ここで、ローカル比較部22bは、スレッド2に対して、開始時刻が切替時刻Aを超過すると判定する(S423)
ここで、グローバル比較部23および更新部24は、スレッド1に対するグローバルフラグに関する各種処理の排他制御を開始して、各フラグの更新処理を実行する。ここでは、以下に示すように、スレッド1がスレッド2よりも先に、起動していることから、スレッド1に対して処理の実行を許容し、スレッド2に対する処理を抑制する。
具体的には、切替時間を超過するスレッド1について、グローバル比較部23は、グローバルフラグテーブル14からグローバルフラグに設定される「フラグA」を取得する(S424とS425)。続いて、グローバル比較部23は、グローバルフラグの「フラグA」に対応する切替時刻A「2013年11月22日12時00分」と、スレッド1の開始時刻「2013年11月22日12時01分」とを比較する(S426)。ここで、グローバル比較部23は、開始時刻が切替時刻Aを超過すると判定する(S427)。
この結果、更新部24は、判定に利用された切替時刻Aとは異なるもう一方の切替時刻Bを切替時刻Aの24時間後である「2013年11月23日12時00分」に更新する(S428とS429)。続いて、更新部24は、更新した切替時刻Bに対応するロガーBへの切替指示をログ出力部25に出力する(S430とS431)。
その後、更新部24は、グローバルフラグテーブル14に設定されるグローバルフラグを、時刻を更新した切替時刻Bに対応する「フラグB」に更新する(S432とS433)。このとき、グローバル比較部23および更新部24は、グローバルフラグに関する各種処理の排他制御を解除する。
スレッド1の排他制御が解除されると、スレッド1と同様に切替時間を超過するスレッド2について、グローバル比較部23は、グローバルフラグテーブル14からグローバルフラグに設定される「フラグB」を取得する(S434とS435)。
続いて、グローバル比較部23は、グローバルフラグの「フラグB」に対応する切替時刻B「2013年11月23日12時00分」と、スレッド1の開始時刻「2013年11月22日12時01分」とを比較する(S436)。ここで、グローバル比較部23は、スレッド2の開始時刻が切替時刻Bを超過しないと判定する(S437)。なお、S434からS437の期間は、排他制御されるので、グローバルフラグへの更新は、スレッド2に関する処理でしか行われない。
その後、スレッド1について、更新部24は、グローバルフラグテーブル14においてグローバルフラグに設定される「フラグB」を、スレッド1のローカルフラグ1に設定する(S438とS439)。
同様に、スレッド2について、更新部24は、S535で取得されたグローバルフラグの「フラグB」を、スレッド2のローカルフラグ2に設定する(S440とS441)。
そして、ログ出力部25は、スレッド1が出力するログを、スレッド1のローカルフラグ1の「フラグB」に対応するロガーBを用いてログファイルBに出力し(S442とS443)、出力結果をクライアント端末5や管理装置に応答する(S444)。
同様に、ログ出力部25は、スレッド2が出力するログを、スレッド2のローカルフラグ2の「フラグB」に対応するロガーBを用いてログファイルBに出力し(S445とS446)、出力結果をクライアント端末5や管理装置に応答する(S447)。
その後、スレッド実行部21は、2013年11月22日12時03分にスレッド1の実行を再度開始する(S448)。すると、ローカル設定部22aは、グローバルフラグテーブル14からグローバルフラグに設定される「フラグB」を取得し(S449とS450)、スレッド1のローカルフラグ1に設定する(S451とS452)。
そして、ローカル比較部22bは、ローカルフラグ1の「フラグB」に対応する切替時刻B「2013年11月23日12時00分」と、スレッド1の開始時刻「2013年11月22日12時03分」とを比較する(S453)。ここで、ローカル設定部22aは、開始時刻が切替時刻Bを超過しないと判定する(S454)。
この結果、ログ出力部25は、新たに実行されたスレッド1が出力するログを、ローカルフラグ1の「フラグB」に対応するロガーBを用いてログファイルBに出力し(S455とS456)、出力結果をクライアント端末5や管理装置に応答する(S457)。
ログ制御装置10は、基準時刻毎にロガーを切替える際に、スレッドの実行時に割当てたフラグで決定される基準時刻で切替判定するので、1つのスレッドに対して同じ基準時刻で切替判定ができる。したがって、ログ制御装置10は、ログ出力に伴う不整合の発生を抑制することができる。
ここで、ログ出力に伴う不整合の発生を抑制する方法としては、先に実行されたスレッドの実行が完了するまで、ログファイルのアクセスを排他制御することで、ログファイルの切り替えを抑制することも考えられる。しかし、先に実行されたスレッドの数が多い場合や先に実行開始されたスレッドが長時間終了しない場合、ログファイルが長時間排他制御されるので、システム全体の性能劣化につながる。
これに対して、ログ制御装置10は、複数の切替時刻と、各切替時刻に対応するロガーと、いずれの切替時刻およびロガーを用いるかを決定する各フラグとを用いることで、ログファイルが排他される時間を抑制できる。
具体的には、図7で説明したように、ログ制御装置10は、切替時刻A以前に発生したスレッド1に対しては、切替時刻Aを超過して実行され続けても、切替時刻Aに対応するログファイルAにログ出力を実行できる。その一方で、ログ制御装置10は、切替時刻A以降かつスレッド1の実行中にスレッド2が発生した場合、スレッド1の処理を待たずに、ログファイルを切替えることができる。
このように、ログ制御装置10は、切替時刻以前のスレッドと、切替時刻以降のスレッドとを並行にログ出力させることができるので、従来に比べて、排他時間を抑制できる。また、ログ制御装置10は、図7で説明したスレッドの追い越しが切替時刻を跨って発生しても、それぞれのスレッドのログを適切なログファイルに出力させることができる。
また、図8で説明したように、ログ制御装置10は、切替時刻を超過するスレッドが複数発生した場合には、グローバルフラグの変更を一方のスレッドに実行させることで、グローバルフラグを複数回更新されることを抑制できる。この結果、ログ制御装置10は、不要なログファイルの切り替えを抑制することができ、ログ出力に伴う不整合の発生を抑制することができる。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。
上記実施例では、取引のログを取得するシステムを用いて説明したが、これに限定されるものではなく、ログ制御装置は、ログを取得するシステムであれば、どのようなシステムに適用することができる。
また、上記実施例で説明したログファイルを切替える時刻等は例示であり、任意に設定変更することができる。また、上記実施例では、切替時刻を2つ用いる例を説明したが、これに限定されるものではなく、3つ以上を用いることもできる。その場合、スレッドの起動時刻が切替時刻Pを超える場合、切替時刻P以外の切替時刻のうち、切替時刻Pに最も近い切替時刻Lの時刻を変更する。
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散や統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
図9は、ハードウェア構成例を説明する図である。図9に示すように、ログ制御装置10は、HDD(Hard Disk Drive)10a、通信インタフェース10b、メモリ10c、CPU(Central Processing Unit)10dを有する。また、図9に示した各部は、バス等で相互に接続される。
HDD10aは、図2等に示した機能を動作させるプログラム、DB、テーブルを記憶する。通信インタフェース10bは、他の装置との通信を制御するインタフェースであり、例えばネットワークインタフェースカードである。
CPU10dは、図2等に示した各処理部と同様の処理を実行するプログラムをHDD10b等から読み出してメモリ10cに展開することで、図2等で説明した各機能を実行するプロセスを動作させる。
すなわち、このプロセスは、ログ制御装置10が有する各処理部と同様の機能を実行する。具体的には、CPU10dは、スレッド実行部21、ローカル処理部22、グローバル比較部23、更新部24、ログ出力部25等と同様の機能を有するプログラムをHDD10a等から読み出す。そして、CPU10dは、スレッド実行部21、ローカル処理部22、グローバル比較部23、更新部24、ログ出力部25と同様の処理を実行するプロセスを実行する。
このようにログ制御装置10は、プログラムを読み出して実行することで検証方法を実行する情報処理装置として動作する。また、ログ制御装置10は、媒体読取装置によって記録媒体から上記プログラムを読み出し、読み出された上記プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、ログ制御装置10によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。