(57)【特許請求の範囲】
【請求項１】
監視対象のモジュールで生成されるログの発生頻度を計算する頻度検出部と、
ログ出力の基準となるログ出力レベルを、前記発生頻度に基づいて調整するレベル変更部と、
前記ログ出力レベル以上の重要度の前記ログを出力するログ出力部とを備え、
前記モジュールが複数のとき、前記レベル変更部は、前記発生頻度に基づいて調整した前記ログ出力レベルを、前記モジュール間の依存関係に応じて補正すること
を特徴とするログ出力装置。
【請求項２】
前記モジュール間の依存関係は、データを送信する前記モジュールと前記データを受信する前記モジュールとの間の依存関係であり、
前記レベル変更部は、前記データを受信した前記モジュールの前記ログ出力レベルの調整量に基づいて、前記データを送信した前記モジュールの前記ログ出力レベルを補正すること
を特徴とする請求項１記載のログ出力装置。
【請求項３】
前記レベル変更部は、前記ログ出力レベルの補正量を、前記モジュール間の依存度に基づいて重み付けすること
を特徴とする請求項１または請求項２記載のログ出力装置。
【請求項４】
コンピュータによって実行されるログ出力方法であって、
監視対象のモジュールで生成されるログの発生頻度を計算し、
ログ出力の基準となるログ出力レベルを、前記発生頻度に基づいて調整し、
前記モジュールが複数のとき、前記発生頻度に基づいて調整した前記ログ出力レベルを、前記モジュール間の依存関係に応じて補正し、
前記ログ出力レベル以上の重要度の前記ログを出力すること
を特徴とするログ出力方法。
【請求項５】
コンピュータに実行させるログ出力プログラムであって、
前記コンピュータを請求項１ないし請求項３のいずれか１項に記載のログ出力装置として動作させるログ出力プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ログ出力装置、ログ出力方法およびログ出力プログラムに関する。
【背景技術】
【０００２】
ログ出力装置は、例えば、コンピュータで実行されるアプリケーションプログラムのログを出力する。システム（アプリケーションプログラム）が期待通りに動作しなかったときや異常終了したときには、ログ情報は、その原因を特定するための重要な情報となる。したがって、ログ情報を詳細に出力することは、問題の原因特定に役立つ。例えば、出力するログの数を増加させるほど、問題の原因特定に必要なログが出力される可能性は、高くなる。
【０００３】
なお、出力するログの数を増加させるほど、不要なログ出力の処理コストが増加する。このため、出力するログの数を増加させるほど、システム全体の処理コストは増加する。したがって、一般的なログ出力装置では、不要なログ出力の処理コストを低減するため、予め指定されたログレベルより重要度の高いログを出力する。以下、ログ出力の基準となるログレベルをログ出力レベルとも称する。近年、メモリの空き容量等のシステムの状態に応じて、ログ出力レベルを変更するログ出力装置が提案されている（例えば、特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−１１０１５６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一般的なログ出力装置では、重要度の低いログの出力を抑制するログ出力レベルが設定されているため、システムの異常終了等の原因特定に必要なログ（詳細なログ情報）が出力されないおそれがある。なお、メモリの空き容量等の特定のパラメータの状態に応じてログ出力レベルを変更するログ出力装置においても、必要なログが出力されないときがある。
【０００６】
例えば、メモリの空き容量等の特定のパラメータの状態に応じてログ出力レベルを変更するログ出力装置では、監視対象のパラメータが正常な状態のときには、ログ出力レベルは、正常動作時のログレベルに維持される。このため、監視対象のパラメータが正常な状態にも拘わらず、システムが期待通りに動作しなかったとき、ログ出力レベルは、適切なログレベル（異常動作時のログレベル）に変更されずに、正常動作時のログレベルに維持される。
【０００７】
すなわち、監視対象のパラメータが正常な状態にも拘わらず、システムが期待通りに動作しなかったときには、詳細なログ情報（問題の原因特定に必要なログ）は、出力されない。また、システムの状態の検出精度を向上させるために、監視対象のパラメータの種類を複数にしたときには、ログ出力装置の構成および制御が複雑になるおそれがある。
【０００８】
本発明の目的は、必要なログを出力しつつ、不要なログ出力の処理コストを低減することである。
【課題を解決するための手段】
【０００９】
本発明の一形態では、ログ出力装置は、監視対象のモジュールで生成されるログの発生頻度を計算する頻度検出部と、ログ出力の基準となるログ出力レベルを、発生頻度に基づいて調整するレベル変更部と、ログ出力レベル以上の重要度のログを出力するログ出力部とを有している。
【発明の効果】
【００１０】
必要なログを出力しつつ、不要なログ出力の処理コストを低減できる。
【図面の簡単な説明】
【００１１】
【図１】一実施形態におけるログ出力装置の例を示している。
【図２】ログ出力レベルとログ発生頻度との関係の一例を示している。
【図３】図１に示したログ出力装置の動作の一例を示している。
【図４】図１に示したログ出力装置の動作の別の例を示している。
【図５】図１に示したログ出力装置の動作の別の例を示している。
【図６】図１に示したログ出力装置の動作の別の例を示している。
【図７】別の実施形態におけるログ出力装置の一例を示している。
【図８】図７に示したログ出力装置におけるログ出力レベル伝播の一例を示している。
【図９】図７に示したログ出力装置の動作の一例を示している。
【図１０】図７に示したログ出力装置が組み込まれるシステムの一例を示している。
【発明を実施するための形態】
【００１２】
以下、実施形態を図面を用いて説明する。
【００１３】
図１は、一実施形態におけるログ出力装置１０の例を示している。ログ出力装置１０は、例えば、監視対象のモジュール１００が動作するシステムに組み込まれ、モジュール１００で生成されるログＬＧｉの出力を管理する。例えば、モジュール１００の動作は、システムに搭載されるコンピュータ等がアプリケーションプログラムを実行することにより実現される。なお、モジュール１００とログ出力装置１０とが組み込まれるシステムもログ出力装置の一態様を形成する。ログ出力装置１０は、例えば、頻度検出部２０、レベル変更部３０およびログ出力部４０を有している。
【００１４】
頻度検出部２０は、監視対象のモジュール１００で生成されるログＬＧｉの発生頻度ＦＱを計算する。以下、ログＬＧｉの発生頻度ＦＱをログ発生頻度ＦＱとも称する。例えば、頻度検出部２０は、モジュール１００からログＬＧｉを順次受け、ログ発生頻度ＦＱを計算する。そして、頻度検出部２０は、ログ発生頻度ＦＱをレベル変更部３０に通知する。なお、頻度検出部２０は、ログＬＧｉをモジュール１００から共有メモリを介して順次受けてもよい。共有メモリは、例えば、ログ出力装置１０およびモジュール１００のどちらからでもアクセス可能なメモリである。
【００１５】
レベル変更部３０は、ログ出力の基準となるログ出力レベルＬＶを、モジュール１００で生成されるログＬＧｉの発生頻度ＦＱに基づいて調整する。例えば、レベル変更部３０は、ログ発生頻度ＦＱを示す信号を頻度検出部２０から受ける。そして、レベル変更部３０は、ログ出力レベルＬＶをログ発生頻度ＦＱに基づいて調整し、調整したログ出力レベルＬＶをログ出力部４０に通知する。ログ出力レベルＬＶは、例えば、ｎ段階（ｎは２以上の整数）の状態値のいずれかに調整される。図２に示す例では、ログ出力レベルＬＶは、５段階の状態値（“１”−“５”）のいずれかに調整される。
【００１６】
なお、ログ出力レベルＬＶの値（状態値）は、例えば、ログＬＧの重要度（ログレベル）に対応している。この実施形態では、ログＬＧの重要度は、ログレベルの値が大きいほど高くなる。例えば、レベル変更部３０は、ログ発生頻度ＦＱが高いとき、ログ出力レベルＬＶの値を低くし、詳細なログ情報（低いログレベルのログＬＧ）が出力されるようにする。また、レベル変更部３０は、例えば、ログ発生頻度ＦＱが低いとき、ログ出力レベルＬＶの値を高くし、不要なログ情報（低いログレベルのログＬＧ）が出力されないようにする。
【００１７】
ログ出力部４０は、レベル変更部３０で調整されたログ出力レベルＬＶ以上の重要度のログＬＧｏを出力する。例えば、重要度が高くなるほどログレベルの値が大きくなるとき、ログ出力レベルＬＶ以上の重要度のログＬＧｏは、ログ出力レベルＬＶ以上のログレベルのログＬＧｏである。なお、重要度が高くなるほどログレベルの値が小さくなるときには、ログ出力レベルＬＶ以上の重要度のログＬＧｏは、ログ出力レベルＬＶ以下のログレベルのログＬＧｏである。
【００１８】
したがって、重要度が高くなるほどログレベルの値が大きくなるシステムでは、ログ出力部４０は、モジュール１００から受けたログＬＧｉのうち、ログ出力レベルＬＶ以上のログレベルのログＬＧｏを選択して出力する。例えば、ログ出力部４０は、ログ出力レベルＬＶを示す信号をレベル変更部３０から受けるとともに、モジュール１００からログＬＧｉを順次受ける。そして、ログ出力部４０は、モジュール１００から受けたログＬＧｉのうち、ログ出力レベルＬＶ以上のログＬＧｏをネットワークやファイル等に出力する。
【００１９】
例えば、ログ出力レベルＬＶが“３”のときには、ログレベルが“３”以上のログＬＧｉ（ＬＧｏ）が出力され、ログレベルが“２”以下のログＬＧｉは出力されない。なお、ログ出力部４０は、ログＬＧｉをモジュール１００から共有メモリを介して順次受けてもよい。また、ログ出力部４０は、ログＬＧｏをメモリに出力してもよい。
【００２０】
このように、ログ出力装置１０から出力されるログＬＧｏは、モジュール１００で生成されるログＬＧｉのうち、ログ出力レベルＬＶ以上のログレベルのログＬＧｉに限定される。これにより、この実施形態では、不要なログ出力の処理コストを低減できる。
【００２１】
なお、ログ出力装置１０の構成は、この例に限定されない。例えば、ログ出力部４０は、ログＬＧｉを頻度検出部２０から順次受けてもよい。あるいは、ログ出力部４０は、頻度検出部２０内に形成されてもよい。また、ログ出力部４０は、モジュール１００内に形成されてもよい。このときには、ログ出力装置１０の一部（ログ出力部４０）は、モジュール１００の一部として機能する。
【００２２】
図２は、ログ出力レベルＬＶとログ発生頻度ＦＱとの関係の一例を示している。図２のログ出力レベルＬＶの値（“１”−“５”）は、例えば、モジュール１００で生成されるログＬＧに定義された５段階のレベルＴｒａｃｅ、Ｄｅｂｕｇ、ｉｎｆｏ、Ｗａｒｎｉｎｇ、Ｅｒｒｏｒにそれぞれ対応している。ログ発生頻度ＦＱの上限Ｆｍａｘおよび下限Ｆｍｉｎは、例えば、ログ出力レベルＬＶ毎に予め設定されている。ログ発生頻度ＦＱは、例えば、予め設定された単位時間（例えば、１０ｍｓ）に発生するログＬＧの数である。
【００２３】
状態値“１”のログ出力レベルＬＶに対応するログ発生頻度ＦＱの上限Ｆｍａｘおよび下限Ｆｍｉｎは、ほぼ無限大および“９９０”にそれぞれ設定されている。ここで、ほぼ無限大は、例えば、ログ出力装置１０の演算処理で使用可能な最大値である。状態値“２”のログ出力レベルＬＶに対応するログ発生頻度ＦＱの上限Ｆｍａｘおよび下限Ｆｍｉｎは、“１０００”および“３９５”にそれぞれ設定されている。
【００２４】
状態値“３”のログ出力レベルＬＶに対応するログ発生頻度ＦＱの上限Ｆｍａｘおよび下限Ｆｍｉｎは、“４００”および“９８”にそれぞれ設定されている。状態値“４”のログ出力レベルＬＶに対応するログ発生頻度ＦＱの上限Ｆｍａｘおよび下限Ｆｍｉｎは、“１００”および“９”にそれぞれ設定されている。そして、状態値“５”のログ出力レベルＬＶに対応するログ発生頻度ＦＱの上限Ｆｍａｘおよび下限Ｆｍｉｎは、“１０”および“０”にそれぞれ設定されている。
【００２５】
ログ出力レベルＬＶは、例えば、上限Ｆｍａｘおよび下限Ｆｍｉｎの少なくとも一方と頻度検出部２０で計算されたログ発生頻度ＦＱとが比較されることにより、5段階の状態値（“１”−“５”）のいずれかに調整される。例えば、ログ出力レベルＬＶは、ログ発生頻度ＦＱが上限Ｆｍａｘより高いとき、比較時のレベルからレベルダウンし、ログ発生頻度ＦＱが下限Ｆｍｉｎより低いとき、比較時のレベルからレベルアップする。
【００２６】
なお、図２の例では、下限Ｆｍｉｎから上限Ｆｍａｘまでの範囲の一部は、２つのログ出力レベルＬＶで重複している。これにより、例えば、図３に示す動作では、ログ発生頻度ＦＱが上限Ｆｍａｘや下限Ｆｍｉｎに近い値で変化しているとき、ログ出力レベルＬＶが頻繁に変更されることを抑制できる。この結果、この実施形態では、ログ出力レベルＬＶの不要な変更を抑制できる。なお、下限Ｆｍｉｎから上限Ｆｍａｘまでの範囲は、２つのログ出力レベルＬＶで重複しないように設定されてもよい。
【００２７】
また、ログ出力レベルＬＶの状態値の数は、ログレベルの状態値の数と異なっていてもよい。例えば、ログレベルが“１”−“５”までの５段階で定義されているとき、ログ出力レベルＬＶは、“２”、“３”および“４”の３段階で定義されてもよい。このときには、例えば、“２”のログ出力レベルＬＶに対応するログ発生頻度ＦＱの上限Ｆｍａｘは、ほぼ無限大に設定される。そして、“４”のログ出力レベルＬＶに対応するログ発生頻度ＦＱの下限Ｆｍｉｎは、“０”に設定される。
【００２８】
図３は、図１に示したログ出力装置１０の動作の一例を示している。図３の動作は、ハードウエアをソフトウエアにより制御することにより実現される。例えば、ログ出力プログラム等のソフトウエアは、コンピュータに図３の動作を実行させる。例えば、ログ出力装置１０の動作を制御するログ出力プログラムの起動により、処理Ｓ１００が実施される。なお、図３の動作は、ハードウエアのみで実現されてもよい。
【００２９】
処理Ｓ１００、Ｓ１２０−Ｓ１８０は、ログ出力装置１０で実施され、処理Ｓ１１０は、モジュール１００で実施される。したがって、処理Ｓ１００−Ｓ１８０の一連の処理は、例えば、モジュール１００とログ出力装置１０とが組み込まれるシステム（コンピュータ）により実施される。
【００３０】
処理Ｓ１００では、ログ出力装置１０（例えば、レベル変更部３０）は、ログ出力レベルＬＶを初期化する。これにより、ログ出力レベルＬＶは、予め設定された初期値（例えば、図２に示した状態値“３”）に設定される。処理Ｓ１１０では、モジュール１００の動作を制御するプログラム（監視対象のプログラム）が実行される。これにより、モジュール１００は、動作状況に応じたログＬＧを発生する。以下、監視対象のプログラムを対象プログラムとも称する。
【００３１】
処理Ｓ１２０では、頻度検出部２０は、ログ発生頻度ＦＱを計算する。例えば、頻度検出部２０は、システムに搭載されたタイマ等を用いて単位時間を計測し、単位時間にモジュール１００から受けたログＬＧの数をカウントする。なお、頻度検出部２０は、最初にカウントしたログＬＧの発生時刻から単位時間経過後に発生したログＬＧか否かを、ログＬＧに含まれる時刻情報等に基づいて判定してもよい。このときには、頻度検出部２０は、タイマを用いて単位時間を計測しなくてもよい。また、ログ発生頻度ＦＱを計算する間隔は、単位時間と同じでもよいし、異なっていてもよい。
【００３２】
処理Ｓ１３０では、ログ出力部４０は、モジュール１００から受けたログＬＧのうち、ログ出力レベルＬＶ以上のログレベルのログＬＧを出力する。例えば、ログ出力レベルＬＶが処理Ｓ１５０や処理Ｓ１７０で調整されたとき、ログ出力部４０は、調整されたログ出力レベルＬＶ以上のログレベルのログＬＧを出力する。なお、ログ出力レベルＬＶは、処理Ｓ１５０や処理Ｓ１７０で調整されるまで、処理Ｓ１００で設定された初期値に維持されている。
【００３３】
処理Ｓ１４０では、レベル変更部３０は、処理Ｓ１２０で計算したログ発生頻度ＦＱがログ発生頻度ＦＱの上限Ｆｍａｘ（ＬＶ）より大きいか否かを判定する。上限Ｆｍａｘ（ＬＶ）の括弧内の“ＬＶ”は、処理Ｓ１４０を実施するときに設定されているログ出力レベルＬＶの値（状態値）である。したがって、上限Ｆｍａｘ（ＬＶ）は、処理Ｓ１４０を実施するときに設定されているログ出力レベルＬＶの値に対応して設定されているログ発生頻度ＦＱの上限Ｆｍａｘである。
【００３４】
図３の動作では、処理Ｓ１３０で参照されたログ出力レベルＬＶの値に対応して設定されているログ発生頻度ＦＱの上限Ｆｍａｘと、処理Ｓ１２０で計算したログ発生頻度ＦＱが比較される。例えば、ログ発生頻度ＦＱの上限Ｆｍａｘおよび下限Ｆｍｉｎが図２に示したように設定され、処理Ｓ１３０で参照されたログ出力レベルＬＶが“３”のときには、レベル変更部３０は、処理Ｓ１２０で計算したログ発生頻度ＦＱが“４００”より大きいか否かを判定する。
【００３５】
ログ発生頻度ＦＱが上限Ｆｍａｘ（ＬＶ）より大きいとき（処理Ｓ１４０のＹｅｓ）、レベル変更部３０は、処理Ｓ１５０において、ログ出力レベルＬＶをレベルダウンする。これにより、ログ出力レベルＬＶの値が低くなり、出力されるログＬＧの数が増加する。例えば、処理Ｓ１５０の後に実施される処理Ｓ１３０では、詳細なログ情報（低いログレベルのログＬＧ）が出力される。一方、ログ発生頻度ＦＱが上限Ｆｍａｘ（ＬＶ）以下のとき（処理Ｓ１４０のＮｏ）、レベル変更部３０の動作は、処理Ｓ１６０に移る。
【００３６】
処理Ｓ１６０では、レベル変更部３０は、処理Ｓ１２０で計算したログ発生頻度ＦＱがログ発生頻度ＦＱの下限Ｆｍｉｎ（ＬＶ）より小さいか否かを判定する。下限Ｆｍｉｎ（ＬＶ）の括弧内の“ＬＶ”の意味は、処理Ｓ１４０と同じである。したがって、図３の動作では、処理Ｓ１３０で参照されたログ出力レベルＬＶの値に対応して設定されているログ発生頻度ＦＱの下限Ｆｍｉｎと、処理Ｓ１２０で計算したログ発生頻度ＦＱが比較される。例えば、ログ発生頻度ＦＱの上限Ｆｍａｘおよび下限Ｆｍｉｎが図２に示したように設定され、処理Ｓ１３０で参照されたログ出力レベルＬＶが“３”のときには、レベル変更部３０は、処理Ｓ１２０で計算したログ発生頻度ＦＱが“９８”より小さいか否かを判定する。
【００３７】
ログ発生頻度ＦＱが下限Ｆｍｉｎ（ＬＶ）より小さいとき（処理Ｓ１６０のＹｅｓ）、レベル変更部３０は、処理Ｓ１７０において、ログ出力レベルＬＶをレベルアップする。これにより、ログ出力レベルＬＶの値は高くなり、出力されるログＬＧの数が減少する。例えば、処理Ｓ１７０の後に実施される処理Ｓ１３０では、不要なログ情報（低いログレベルのログＬＧ）は出力されない。一方、ログ発生頻度ＦＱが下限Ｆｍｉｎ（ＬＶ）以上のとき（処理Ｓ１６０のＮｏ）、ログ出力装置１０の動作は、処理Ｓ１８０に移る。
【００３８】
すなわち、ログ発生頻度ＦＱが下限Ｆｍｉｎ（ＬＶ）以上で上限Ｆｍａｘ（ＬＶ）以下のときには、ログ出力装置１０は、ログ出力レベルＬＶの値を変更せずに、処理Ｓ１８０の終了判定を実施する。なお、ログ発生頻度ＦＱが上限Ｆｍａｘ（ＬＶ）より大きいときには、ログ出力レベルＬＶがレベルダウンされた後（処理Ｓ１５０の後）、処理Ｓ１８０が実施される。また、ログ発生頻度ＦＱが下限Ｆｍｉｎ（ＬＶ）より小さいときには、ログ出力レベルＬＶがレベルアップされた後（処理Ｓ１７０の後）、処理Ｓ１８０が実施される。
【００３９】
処理Ｓ１８０では、ログ出力装置１０は、対象プログラム（モジュール１００の動作）が終了したか否かを判定する。対象プログラムが終了していないとき（処理Ｓ１８０のＮｏ）、ログ出力装置１０の動作は、処理Ｓ１１０に移る。これにより、ログ出力レベルＬＶを調整する処理（処理Ｓ１２０−Ｓ１７０）が繰り返される。一方、対象プログラムが終了しているとき（処理Ｓ１８０のＹｅｓ）、ログ出力装置１０は、一連の処理を終了する。
【００４０】
このように、ログ出力装置１０は、ログ発生頻度ＦＱが高くなるほど、ログ出力レベルＬＶの値を低くする。これにより、ログ出力装置１０は、ログ発生頻度ＦＱが高いとき、低いレベル（詳細なログ情報）から高いレベル（重要度の高いログ情報）までのログＬＧを出力できる。例えば、モジュール１００が正常な動作と異なる動作をし始めると、警告等を知らせるログＬＧ（例えば、ＷａｒｎｉｎｇレベルのログＬＧ）が増加し、ログ発生頻度ＦＱが高くなる。
【００４１】
したがって、ログ発生頻度ＦＱが高くなるほど、モジュール１００が期待通りに動作していない可能性が高くなる。すなわち、モジュール１００の異常終了等の原因を特定するための詳細なログＬＧが必要になる可能性が高くなる。この実施形態では、ログ出力装置１０は、ログ発生頻度ＦＱが高くなるほど、ログ出力レベルＬＶの値を低くしている。このため、この実施形態では、問題の原因特定に必要なログＬＧを出力できる。
【００４２】
また、ログ出力装置１０は、ログ発生頻度ＦＱが低くなるほど、ログ出力レベルＬＶの値を高くする。これにより、ログ出力装置１０は、ログ発生頻度ＦＱが低いとき、低いレベル（不要なログ情報）のログＬＧを出力しない。例えば、モジュール１００が正常に動作しているときには、警告等を知らせるログＬＧ（例えば、ＷａｒｎｉｎｇレベルのログＬＧ）が発生しないため、ログ発生頻度ＦＱは低い。
【００４３】
したがって、ログ発生頻度ＦＱが低いときには、ログレベルの低いログＬＧを出力する処理は、不要なログ出力の処理に相当する。この実施形態では、ログ出力装置１０は、ログ発生頻度ＦＱが低くなるほど、ログ出力レベルＬＶの値を高くしている。このため、この実施形態では、不要なログ出力の処理コストを低減できる。
【００４４】
このように、ログ出力装置１０は、モジュール１０の動作状況に応じて、ログ出力レベルＬＶを動的に変化させる。すなわち、この実施形態では、ログ出力レベルＬＶを適切なログレベルに自動調整できる。この結果、この実施形態では、必要なログＬＧを出力しつつ、不要なログ出力の処理コストを低減できる。
【００４５】
なお、ログ出力装置１０の動作は、この例に限定されない。例えば、ログＬＧの出力（処理Ｓ１３０）は、処理Ｓ１８０の前に実施されてもよいし、処理Ｓ１２０の前に実施されてもよい。また、頻度検出部２０は、式（１）に示すように、ログレベル毎に重み付けして、ログ発生頻度ＦＱを計算してもよい。なお、式（１）の“ω”は、各ログレベルの重みであり、“Ｃ”は、単位時間に発生した各ログレベルのログＬＧの数である。積和は、例えば、ログレベルの状態値の数がｎ個（図２の例では、５個）のとき、ｉ＝１からｎまでである。
【００４６】
ＦＱ＝Σ（ω（ｉ）・Ｃ（ｉ））  ・・・（１）
例えば、ログレベルの低いログＬＧが多量に発生するモジュール１００では、発生頻度の低いＷａｒｎｉｎｇレベル等のログＬＧの数の増減は、ログ発生頻度ＦＱに反映されにくい。このため、モジュール１００の動作状況の検出精度が低下するおそれがある。このようなときには、各ログレベルに対して重みを付けることにより、モジュール１００の動作状況の検出精度を向上できる。例えば、Ｗａｒｎｉｎｇレベル（図２では、ログレベル＝４）以上のレベルの重みωを“１”に設定し、Ｗａｒｎｉｎｇレベルより低いレベルの重みωを“０”に設定する。このときのログ発生頻度ＦＱは、Ｗａｒｎｉｎｇレベル以上のログＬＧの発生頻度である。
【００４７】
図４は、図１に示したログ出力装置１０の動作の別の例を示している。図４の動作は、ハードウエアをソフトウエアにより制御することにより実現される。例えば、ログ出力プログラム等のソフトウエアは、コンピュータに図４の動作を実行させる。なお、図４の動作は、ハードウエアのみで実現されてもよい。
【００４８】
図４の動作では、処理Ｓ１００−Ｓ１８０と処理Ｓ２１０−Ｓ２２０とが並列に実施される。例えば、処理Ｓ１００−Ｓ１８０は、ログ出力装置１０で実施され、処理Ｓ２１０−Ｓ２２０は、モジュール１００で実施される。なお、図４の破線の矢印は、モジュール１００で発生したログＬＧが共有メモリを介してログ出力装置１０に転送されることを示している。
【００４９】
例えば、モジュール１００とログ出力装置１０とが組み込まれるシステム（コンピュータ）は、処理Ｓ１００−Ｓ１８０と処理Ｓ２１０−Ｓ２２０とを互いに異なるスレッド（図４では、監視対象スレッド、ログ出力スレッド）で実施できる。なお、処理Ｓ２１２、Ｓ２２０は、モジュール１００とは別のモジュールにより実施されてもよい。例えば、処理Ｓ２１２は、ログ出力装置１０により実施されてもよい。このときには、ログ出力装置１０の一部（処理Ｓ２１２）は、ログ出力装置１０の他の処理（処理Ｓ１００−Ｓ１８０）と異なるスレッドで動作する。
【００５０】
ログ出力スレッドによるログ出力装置１０の動作（処理Ｓ１００−Ｓ１８０）は、図３に示した処理Ｓ１１０の代わりに、処理Ｓ１１２が実施されることを除いて、図３の動作と同じである。図３で説明した動作については、詳細な説明を省略する。先ず、ログ出力スレッドの起動により、ログ出力プログラムが起動する。これにより、処理Ｓ１００が実施される。そして、ログ出力スレッドの起動後に、監視対象スレッドが起動され、対象プログラムが起動される。これにより、処理Ｓ２１０が実施される。
【００５１】
処理Ｓ２１０では、モジュール１００の動作を制御する対象プログラムが実行される。これにより、モジュール１００は、動作状況に応じたログＬＧを発生する。処理Ｓ２１２では、モジュール１００は、発生したログＬＧを共有メモリにライトする。これにより、モジュール１００で発生したログＬＧが、ログ出力レベルＬＶに拘わらず、共有メモリに記憶される。
【００５２】
処理Ｓ２２０では、モジュール１００は、対象プログラムを終了させるか否かを判定する。対象プログラムが終了しないとき（処理Ｓ２２０のＮｏ）、モジュール１００の動作は、処理Ｓ２１０に移る。一方、対象プログラムが終了するとき（処理Ｓ２２０のＹｅｓ）、モジュール１００は、一連の処理を終了する。すなわち、モジュール１００は、対象プログラムが終了するまで、処理Ｓ２１２を繰り返す。
【００５３】
ログ出力装置１０は、処理Ｓ１００でログ出力レベルＬＶを初期化した後、処理Ｓ１１２において、ログＬＧを共有メモリからリードする。例えば、処理Ｓ１１２では、頻度検出部２０は、共有メモリに記憶されているログＬＧを順次読み出す。換言すれば、頻度検出部２０は、ログＬＧをモジュール１００から共有メモリを介して順次受ける。これにより、頻度検出部２０は、処理Ｓ１２０において、ログ発生頻度ＦＱを計算できる。
【００５４】
処理Ｓ１２０−Ｓ１８０は、図３の処理Ｓ１２０−Ｓ１８０と同じである。なお、対象プログラムが終了していないとき（処理Ｓ１８０のＮｏ）、ログ出力装置１０の動作は、処理Ｓ１１２に移る。図４の動作を実施するログ出力装置１０においても、図３の動作を実施するログ出力装置１０と同様の効果を得ることができる。さらに、図４の動作では、監視対象スレッドとログ出力スレッドとを並列に実施できるため、モジュール１００とログ出力装置１０とが組み込まれるシステム（コンピュータ）の処理効率を向上できる。
【００５５】
図５は、図１に示したログ出力装置１０の動作の別の例を示している。図５の動作は、ハードウエアをソフトウエアにより制御することにより実現される。例えば、ログ出力プログラム等のソフトウエアは、コンピュータに図５の動作を実行させる。なお、図５の動作は、ハードウエアのみで実現されてもよい。
【００５６】
図５の動作では、処理Ｓ１００−Ｓ１８０と処理Ｓ２００−Ｓ２２０とが並列に実施される。したがって、例えば、モジュール１００とログ出力装置１０とが組み込まれるシステム（コンピュータ）は、処理Ｓ１００−Ｓ１８０と処理Ｓ２００−Ｓ２２０とを互いに異なるスレッド（図５では、監視対象スレッド、ログ管理スレッド）で実施できる。なお、図５の破線の矢印は、ログＬＧおよびログ出力レベルＬＶが異なるスレッド間で参照されることを示している。
【００５７】
例えば、図５の破線の矢印（ＬＧ）は、モジュール１００で発生したログＬＧの数をカウントするための情報がログ出力装置１０に転送されることを示している。また、図５の破線の矢印（ＬＶ）は、例えば、処理Ｓ１００−Ｓ１８０がログ出力装置１０で実施され、処理Ｓ２００−Ｓ２２０がモジュール１００で実施されとき、ログ出力装置１０で調整したログ出力レベルＬＶがモジュール１００に転送されることを示している。
【００５８】
なお、処理Ｓ２００、Ｓ２１２、Ｓ２１４、Ｓ２２０は、モジュール１００とは別のモジュールにより実施されてもよい。例えば、処理Ｓ２００、Ｓ２１２、Ｓ２１４は、ログ出力装置１０により実施されてもよい。このときには、ログ出力装置１０の一部（処理Ｓ２００、Ｓ２１２、Ｓ２１４）は、ログ出力装置１０の他の処理（処理Ｓ１００−Ｓ１８０）と異なるスレッドで動作する。
【００５９】
ログ管理スレッドによるログ出力装置１０の動作（処理Ｓ１００−Ｓ１８０）では、図４に示した処理Ｓ１１２、Ｓ１３０が省かれ、処理Ｓ１２０の代わりに処理Ｓ１２０ａが実施される。ログ出力装置１０のその他の動作は、図４のログ出力装置１０の動作と同じである。図３および図４で説明した動作については、詳細な説明を省略する。先ず、ログ管理スレッドの起動により、ログ出力プログラムが起動する。これにより、処理Ｓ１００が実施される。そして、ログ出力プログラムの起動後に、監視対象スレッドが起動され、処理Ｓ２００が実施される。
【００６０】
処理Ｓ２００では、モジュール１００は、処理Ｓ２１２で参照するログ出力レベルＬＶを初期化する。なお、処理Ｓ２００は、例えば、ログ出力装置１０により実施されてもよい。処理Ｓ２１０では、モジュール１００の動作を制御する対象プログラムが実行される。これにより、モジュール１００は、動作状況に応じたログＬＧを発生する。
【００６１】
処理Ｓ２１２では、モジュール１００は、動作状況に応じて発生したログＬＧのうち、ログ出力レベルＬＶ以上のログレベルのログＬＧをメモリ（例えば、共有メモリ）にライトする。これにより、モジュール１００で発生したログＬＧのうち、ログ出力レベルＬＶ以上のログＬＧが共有メモリに記憶される。処理Ｓ２１２で参照されるログ出力レベルＬＶは、処理Ｓ２１４で更新されるまで、処理Ｓ２００で設定された初期値に維持されている。なお、処理Ｓ２１２の動作は、図１に示したログ出力部４０の動作に対応している。すなわち、ログ出力装置１０の一部（ログ出力部４０）は、モジュール１００の一部として機能する。
【００６２】
処理Ｓ２１４では、モジュール１００は、ログ出力装置１０の処理Ｓ１５０や処理Ｓ１７０で調整されたログ出力レベルＬＶに基づいて、処理Ｓ２１２で参照するログ出力レベルＬＶを更新する。例えば、モジュール１００は、ログ出力レベルＬＶを示す信号をログ出力装置１０（より詳細には、レベル変更部３０）から受ける。
【００６３】
処理Ｓ２２０では、モジュール１００は、対象プログラムを終了させるか否かを判定する。対象プログラムが終了しないとき（処理Ｓ２２０のＮｏ）、モジュール１００の動作は、処理Ｓ２１０に移る。一方、対象プログラムが終了するとき（処理Ｓ２２０のＹｅｓ）、モジュール１００は、一連の処理を終了する。
【００６４】
ログ出力装置１０は、処理Ｓ１００でログ出力レベルＬＶを初期化した後、処理Ｓ１２０ａにおいて、ログ発生頻度ＦＱを計算する。例えば、頻度検出部２０は、モジュール１００の処理Ｓ２１２を監視し、単位時間にモジュール１００で発生したログＬＧの数をカウントする。これにより、頻度検出部２０は、ログ発生頻度ＦＱを計算できる。
【００６５】
処理Ｓ１２０ａの実施後、ログ出力装置１０の動作は、処理Ｓ１４０に移る。処理Ｓ１４０−Ｓ１８０は、図３の処理Ｓ１４０−Ｓ１８０と同じである。なお、対象プログラムが終了していないとき（処理Ｓ１８０のＮｏ）、ログ出力装置１０の動作は、処理Ｓ１２０ａに移る。
【００６６】
図５の動作を実施するログ出力装置１０においても、図４の動作を実施するログ出力装置１０と同様の効果を得ることができる。なお、ログ出力装置１０の動作は、この例に限定されない。例えば、ログ管理スレッドで動作するログ出力装置１０および監視対象スレッドで動作するモジュール１００のどちらからでもアクセス可能な記憶部にログ出力レベルＬＶが記憶されるとき、処理Ｓ２００、Ｓ２１４は、省かれてもよい。
【００６７】
また、ログ発生頻度ＦＱの計算は、監視対象スレッドで実施されてもよい。すなわち、頻度検出部２０の動作は、監視対象スレッドで実施されてもよい。このときには、例えば、ログ発生頻度ＦＱを示す信号が、監視対象スレッドで動作する頻度検出部２０からログ管理スレッドで動作するレベル変更部３０に転送される。あるいは、ログ発生頻度ＦＱは、ログ管理スレッドで動作するレベル変更部３０および監視対象スレッドで動作する頻度検出部２０のどちらからでもアクセス可能な記憶部に記憶されてもよい。
【００６８】
図６は、図１に示したログ出力装置１０の動作の別の例を示している。図６の動作は、ハードウエアをソフトウエアにより制御することにより実現される。例えば、ログ出力プログラム等のソフトウエアは、コンピュータに図６の動作を実行させる。なお、図６の動作は、ハードウエアのみで実現されてもよい。図６の動作（処理Ｓ１００−Ｓ１８０）は、図３に示した処理Ｓ１５０、Ｓ１７０の代わりに、処理Ｓ１５０ａ、Ｓ１７０ａが実施されることを除いて、図３の動作と同じである。図３で説明した動作については、詳細な説明を省略する。
【００６９】
例えば、ログ出力装置１０の動作を制御するログ出力プログラムの起動により、処理Ｓ１００が実施される。処理Ｓ１００−Ｓ１４０、Ｓ１６０は、図３の処理Ｓ１００−Ｓ１４０、Ｓ１６０と同じである。また、処理Ｓ１５０ａ、Ｓ１７０ａは、処理Ｓ１５０ａ、Ｓ１７０ａの後に実施される処理を除いて、図３の処理Ｓ１５０、Ｓ１７０と同じである。例えば、レベル変更部３０は、処理Ｓ１５０ａでログ出力レベルＬＶをレベルダウンした後、処理Ｓ１４０を実施する。また、レベル変更部３０は、処理Ｓ１７０ａでログ出力レベルＬＶをレベルアップした後、処理Ｓ１６０を実施する。
【００７０】
すなわち、レベル変更部３０は、処理Ｓ１２０で計算したログ発生頻度ＦＱが上限Ｆｍａｘ（ＬＶ）より大きくなるまで、ログ出力レベルＬＶをレベルダウンする。あるいは、レベル変更部３０は、ログ発生頻度ＦＱが下限Ｆｍｉｎ（ＬＶ）より小さくなるまで、ログ出力レベルＬＶをレベルアップする。これにより、レベル変更部３０は、例えば、１回のログ発生頻度ＦＱの計算で、ログ出力レベルＬＶを２段階以上変化させることができる。すなわち、レベル変更部３０は、ログ出力レベルＬＶを、ログ発生頻度ＦＱに応じたログレベルに迅速に設定できる。
【００７１】
図６の動作を実施するログ出力装置１０においても、図３の動作を実施するログ出力装置１０と同様の効果を得ることができる。さらに、図６の動作では、ログ発生頻度ＦＱに応じたログ出力レベルＬＶに迅速に調整できるため、ログ発生頻度ＦＱの変化量が大きいときにも、ログ出力レベルＬＶを適切なログレベルに迅速に自動調整できる。なお、図４および図５の動作においても、処理Ｓ１５０、Ｓ１７０の代わりに、処理Ｓ１５０ａ、Ｓ１７０ａが実施されてもよい。
【００７２】
以上、この実施形態では、ログ出力装置１０は、モジュール１００のログ発生頻度ＦＱを計算する頻度検出部２０と、ログ出力レベルＬＶをログ発生頻度ＦＱに基づいて調整するレベル変更部３０と、ログ出力レベルＬＶ以上の重要度（ログレベル）のログＬＧを出力するログ出力部４０とを有している。これにより、この実施形態では、ログ出力レベルＬＶをモジュール１００の動作状況に応じた適切なログレベルに自動調整できる。この結果、この実施形態では、必要なログＬＧを出力しつつ、不要なログ出力の処理コストを低減できる。
【００７３】
例えば、この実施形態では、モジュール１００が正常に動作しているときには、ログ出力レベルＬＶを高くし、出力するログＬＧの数を低減できる。この結果、ログ出力の処理コストを低減できる。また、この実施形態では、ログ発生頻度ＦＱが高いときには、ログ出力レベルＬＶを低くし、多くのログＬＧを出力させることができる。これにより、この実施形態では、モジュール１００が異常終了等したときの原因を調査するための情報（ログＬＧ）を与えることができる。
【００７４】
図７は、別の実施形態におけるログ出力装置１２の一例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。この実施形態のログ出力装置１２の構成は、レベル変更部３０の代わりにレベル変更部３２を有することを除いて、上述した実施形態と同じである。図７の太い線の矢印は、モジュール１００間のデータフローを示している。
【００７５】
図７の符号の末尾の“ａ”、“ｂ”、“＿ａ”および“＿ｂ”等は、２つのログ出力装置１２（１２ａ、１２ｂ）を区別するために付している。したがって、図７のログＬＧｉ＿ａ、ＬＧｉ＿ｂ、信号ＦＱａ、ＦＱｂ、信号ＬＶａ、ＬＶｂ、ログＬＧｏ＿ａ、ＬＧｏ＿ｂの意味は、図１のログＬＧｉ、信号ＦＱ、信号ＬＶ、ログＬＧｏと同じである。以下、２つのログ出力装置１２を区別せずに説明するとき等、“ａ”、“ｂ”、“＿ａ”および“＿ｂ”等を省略して称するときもある。
【００７６】
ログ出力装置１２は、例えば、モジュール１００が複数のとき、モジュール１００（１００ａ、１００ｂ）毎に形成される。ログ出力装置１２ａの構成および動作は、ログ出力装置１２ｂと同じである。このため、ログ出力装置１２ａについて説明する。ログ出力装置１２ａは、例えば、頻度検出部２０ａ、レベル変更部３２ａおよびログ出力部４０ａを有している。頻度検出部２０ａおよびログ出力部４０ａは、図１に示した頻度検出部２０およびログ出力部４０と同じである。
【００７７】
レベル変更部３２ａは、例えば、ログ発生頻度ＦＱａを示す信号および伝播レベルＤＬｂを示す信号を受け、ログ出力レベルＬＶａを示す信号および伝播レベルＤＬａを示す信号を出力する。例えば、レベル変更部３２ａは、ログ発生頻度ＦＱａに基づいて調整したログ出力レベルを、伝播レベルＤＬｂに基づいて補正する。
【００７８】
したがって、レベル変更部３２ａから出力されるログ出力レベルＬＶａは、伝播レベルＤＬｂに基づいて補正されている。伝播レベルＤＬｂは、例えば、データを送信するモジュール１００ａとデータを受信するモジュール１００ｂとの間の依存関係に応じた値である。すなわち、レベル変更部３２ａは、ログ発生頻度ＦＱａに基づいて調整したログ出力レベルを、モジュール１００間の依存関係に応じて補正する。
【００７９】
このように、この実施形態では、モジュール１００のログ発生頻度ＦＱの変化（モジュール１００の内部状態の変化）により、ログ出力レベルＬＶが変化したとき、そのモジュール１００にデータを送信したモジュール１００のログ出力レベルＬＶも変化させる。
【００８０】
なお、ログ出力装置１２の構成は、この例に限定されない。例えば、レベル変更部３２が受ける伝播レベルＤＬは、１つに限定されない。例えば、図８に示すように、ログ出力装置１２（１２ａ）は、複数のログ出力装置１２（１２ｂ、１２ｃ）から伝播レベルＤＬをそれぞれ受けてもよい。同様に、レベル変更部３２が出力する伝播レベルＤＬは、１つに限定されない。例えば、図８に示すように、ログ出力装置１２（１２ｄ）は、複数のログ出力装置１２（１２ｂ、１２ｃ）に伝播レベルＤＬをそれぞれ出力してもよい。
【００８１】
図８は、図７に示したログ出力装置１２におけるログ出力レベル伝播の一例を示している。図８の例では、モジュールシステムは、モジュール１００ａ、１００ｂ、１００ｃ、１００ｄとモジュール１００毎に形成されたログ出力装置１２ａ、１２ｂ、１２ｃ、１２ｄとを有している。そして、モジュールシステムは、例えば、各モジュール１００を並列実行し、所定の制御を実現する。
【００８２】
図８の接続関係の実線の矢印は、モジュール１００間のデータフローを示し、破線の矢印は、ログ出力レベルＬＶの変化量（調整量）の伝播（伝播レベルＤＬの流れ）を示している。また、図８のデータ出力先モジュールの行とデータ出力元モジュールの列とによる表は、モジュール１００間のデータ転送の有無（“０”は無し、符号Ｗは有り）を示している。さらに、符号Ｗ（Ｗａｄ、Ｗｂａ、Ｗｃａ、Ｗｄｂ、Ｗｄｃ）は、データ出力先モジュール１００のログ出力装置１２からデータ出力元モジュール１００のログ出力装置１２に、ログ出力レベルＬＶの変化量を伝播する際の重みを示している。なお、図８の括弧内の数字（計算例ｅｘ１の値、計算例ｅｘ２の値）は、重みＷの数値例を示している。
【００８３】
例えば、データ転送が発生するモジュール１００間（依存関係の有るモジュール１００間）では、ログ出力レベルＬＶの変化量は、データ転送量に比例した重みＷにしたがって、伝播する。なお、データ転送が発生しないモジュール１００間（依存関係の無いモジュール１００間）では、ログ出力レベルＬＶの変化量は、伝播されない。
【００８４】
図８の例では、モジュール１００ａは、モジュール１００ｄから受けたデータに応じて動作し、モジュール１００ｂ、１００ｃにデータを出力する。このため、モジュール１００ａのログ出力装置１２ａは、伝播レベルＤＬａｄをモジュール１００ｄのログ出力装置１２ｄに出力する。伝播レベルＤＬａｄは、モジュール１００ａのログ出力レベルＬＶの変化量と重みＷａｄとに基づいて算出される。
【００８５】
モジュール１００ｂは、モジュール１００ａから受けたデータに応じて動作し、モジュール１００ｄにデータを出力する。このため、モジュール１００ｂのログ出力装置１２ｂは、伝播レベルＤＬｂａをログ出力装置１２ａに出力する。伝播レベルＤＬｂａは、モジュール１００ｂのログ出力レベルＬＶの変化量と重みＷｂａとに基づいて算出される。
【００８６】
モジュール１００ｃは、モジュール１００ａから受けたデータに応じて動作し、モジュール１００ｄにデータを出力する。このため、モジュール１００ｃのログ出力装置１２ｃは、伝播レベルＤＬｃａをログ出力装置１２ａに出力する。伝播レベルＤＬｃａは、モジュール１００ｃのログ出力レベルＬＶの変化量と重みＷｃａとに基づいて算出される。
【００８７】
モジュール１００ｄは、モジュール１００ｂ、１００ｃから受けたデータに応じて動作し、モジュール１００ａにデータを出力する。このため、モジュール１００ｄのログ出力装置１２ｄは、伝播レベルＤＬｄｂ、ＤＬｄｃをログ出力装置１２ｂ、１２ｃにそれぞれ出力する。伝播レベルＤＬｄｂは、モジュール１００ｄのログ出力レベルＬＶの変化量と重みＷｄｂとに基づいて算出される。そして、伝播レベルＤＬｄｃは、モジュール１００ｄのログ出力レベルＬＶの変化量と重みＷｄｃとに基づいて算出される。
【００８８】
ここで、重みＷは、例えば、重みＷを均等に割り当てる方法では、データ転送の有無によって決定され、互いに同じ値（例えば、“１”）に設定される。なお、重みＷは、モジュール１００間の依存度に基づいて設定されてもよい。例えば、１つのモジュール１００ｄが２つのモジュール１００ｂ、１００ｃと依存関係にあるとき、依存度の高いモジュール１００ｃの方が依存度の低いモジュール１００ｂに比べて、モジュール１００ｄに与える影響が大きい。このため、モジュール１００間の依存度に基づく重みＷを設定することにより、ログ出力レベルＬＶの変化量の伝播先のログ出力レベルＬＶを、適切に補正できる。
【００８９】
モジュール１００間の依存度に基づく重みＷとして、例えば、データ転送量に比例した重みＷが設定される。例えば、データ量当たりの依存度が各モジュール１００でほぼ同じとき、多量のデータを送信しているモジュール１００の方が少量のデータを送信しているモジュール１００に比べて、データを受信するモジュール１００に与える影響が大きい。このため、データ転送量に比例した重みＷを設定することにより、ログ出力レベルＬＶの変化量の伝播先のログ出力レベルＬＶを、適切に補正できる。
【００９０】
データ転送量に比例した重みＷを設定する方法では、過去のログデータや実験データ等からデータ転送量の平均値を計算し、重みＷを計算する。データ転送量は、例えば、単位時間当たりにモジュール１００間を伝播するデータ量により算出される。図８の計算例ｅｘ１の重み値は、全てのモジュール１００対のうちの最大値のデータ転送量を基準に正規化したときの一例を示している。
【００９１】
この計算方法では、先ず、単位時間にモジュール１００間を伝播するデータ量（送受信されるデータのサイズまたはデータ伝達頻度）をモジュール１００対ごとに計算する。次に、全てのモジュール１００間のデータ転送量から、最大値のデータ転送量を検出する。そして、各モジュール１００間のデータ転送量を、検出した最大値のデータ転送量で割って正規化する。例えば、図８において、モジュール１００ｄからモジュール１００ａに転送されるデータ量が最大のとき、モジュール１００ｄからモジュール１００ａ間のデータ転送量（最大値）で、各モジュール１００間のデータ転送量を割って正規化する。
【００９２】
モジュール１００ｄ、１００ａ間のデータ転送量、モジュール１００ａ、１００ｂ間のデータ転送量、モジュール１００ａ、１００ｃ間のデータ転送量、モジュール１００ｂ、１００ｄ間のデータ転送量、モジュール１００ｃ、１００ｄ間のデータ転送量の比が、１０：７：４：２：８のときには、重みＷは、図８の計算例ｅｘ１に示した値になる。すなわち、重みＷａｄ、Ｗｂａ、Ｗｃａ、Ｗｄｂ、Ｗｄｃは、それぞれ１．０、０．７、０．４、０．２、０．８である。
【００９３】
また、図８の計算例ｅｘ２の重み値は、計算例ｅｘ１の重み値の計算方法とは別の計算方法で重みＷを計算したときの一例を示している。この計算方法でも、先ず、単位時間にモジュール１００間を伝播するデータ量をモジュール１００対ごとに計算する。そして、各モジュール１００について、入力データ量に対する出力元の各モジュール１００からのデータ量の割合を計算する。例えば、図８では、モジュール１００ｄは、入力データをモジュール１００ｂ、１００ｃから受ける。したがって。モジュール１００ｄの入力データ量に対するモジュール１００ｂ、１００ｃからのデータ量の割合を計算する。
【００９４】
すなわち、入力データの全データ量を１としたときの各入力モジュール１００からの入力データ量の割合を計算する。例えば、モジュール１００ｂからモジュール１００ｄに転送されるデータ量とモジュール１００ｃからモジュール１００ｄに転送されるデータ量の比が１：４のとき、モジュール１００ｂからモジュール１００ｄに入力されるデータ量の割合は０．２である。また、モジュール１００ｃからモジュール１００ｄに入力されるデータ量の割合は０．８である。
【００９５】
図８の計算例ｅｘ２の値は、この方法で計算した重みＷの一例を示している。例えば、重みＷａｄ、Ｗｂａ、Ｗｃａは、各モジュール１００ａ、１００ｂ、１００ｃが１つのモジュール１００のみからデータを受けているため、１．０である。また、重みＷｄｂ、Ｗｄｃは、モジュール１００ｂ、１００ｄ間のデータ転送量とモジュール１００ｃ、１００ｄ間のデータ転送量の比が１：４のとき、それぞれ０．２、０．８である。なお、重みＷの計算方法は、この例に限定されない。
【００９６】
図８の例では、ログ出力レベルＬＶの変化量は、１つ前のモジュール１００のログ出力装置１２まで伝播される。ログ出力レベルＬＶの変化量を伝播させる段数を１つにすることにより、ログ出力レベルＬＶの更新制御を簡易にできる。なお、ログ出力レベルＬＶの変化量は、２つ以上前のモジュール１００のログ出力装置１２まで伝播されてもよい。このときには、ログ出力装置１２は、伝播の度合いを、伝播させる段数の増加に伴い減衰させる。また、モジュール１００のデータの伝播がループになっているときには、ログ出力装置１２は、ログ出力レベルＬＶの変化量の伝播を１周目で止める。
【００９７】
図９は、図７に示したログ出力装置１２の動作の一例を示している。図９の動作は、ハードウエアをソフトウエアにより制御することにより実現される。例えば、ログ出力プログラム等のソフトウエアは、コンピュータに図９の動作を実行させる。例えば、ログ出力装置１２の動作を制御するログ出力プログラムの起動により、処理Ｓ３００が実施される。なお、図９の動作は、ハードウエアのみで実現されてもよい。
【００９８】
処理Ｓ３００、Ｓ３２０−Ｓ３６０は、ログ出力装置１２で実施され、処理Ｓ３１０は、モジュール１００で実施される。したがって、処理Ｓ３００−Ｓ３６０の一連の処理は、例えば、モジュール１００とログ出力装置１２とが組み込まれるシステム（コンピュータ）により実施される。なお、図９では、ログ出力レベルＬＶの更新を中心に説明する。
【００９９】
処理Ｓ３００では、ログ出力装置１２（例えば、レベル変更部３２）は、各モジュール１００のログ出力レベルＬＶ、伝播レベルＤＬｓ、ＤＬｒを初期化する。例えば、ログ出力レベルＬＶは、予め設定された初期値（例えば、図２に示した状態値“３”）に設定される。また、伝播レベルＤＬｓ、ＤＬｒは、例えば、“０”に初期化される。なお、伝播レベルＤＬｓは、ログ出力装置１２が出力する伝播レベルＤＬである。また、伝播レベルＤＬｒは、ログ出力装置１２が受ける伝播レベルＤＬに対応している。
【０１００】
処理Ｓ３１０では、モジュール１００の動作を制御する対象プログラムが実行される。これにより、モジュール１００は、動作状況に応じたログＬＧを発生する。
【０１０１】
処理Ｓ３２０では、ログ出力装置１２は、ログ発生頻度ＦＱに基づくログ出力レベルＬＶを算出する。例えば、ログ出力装置１２は、図６に示した処理Ｓ１２０−Ｓ１７０ａを実施することにより、ログ発生頻度ＦＱに基づくログ出力レベルＬＶを算出する。なお、図６に示した処理Ｓ１６０の判定結果がＮｏのとき、ログ出力装置１２の動作は、処理Ｓ３３０に移る。また、処理Ｓ３２０では、ログ出力装置１２は、ログ出力レベルＬＶ以上のログレベルのログＬＧを出力する処理（図６に示した処理Ｓ１３０）も実施する。
【０１０２】
処理Ｓ３３０では、各ログ出力装置１２は、ログ出力レベルＬＶの変化量ＤＬＶ（調整量）の伝播先の全てのログ出力装置１２の伝播レベルＤＬｓを算出する。例えば、レベル変更部３２は、ログ発生頻度ＦＱに基づくログ出力レベルＬＶの変化量ＤＬＶと重みＷとを乗算し、乗算結果を伝播レベルＤＬｓとして算出する。ログ出力レベルＬＶの変化量ＤＬＶは、例えば、処理Ｓ３２０実施後のログ出力レベルＬＶから処理Ｓ３２０実施前のログ出力レベルＬＶを引いた値である。したがって、変化量ＤＬＶは、ログ出力レベルＬＶが増加（レベルアップ）したときは、正の値であり、ログ出力レベルＬＶが減少（レベルダウン）したときは、負の値である。
【０１０３】
処理Ｓ３４０では、ログ出力装置１２は、処理Ｓ３３０で算出した伝播レベルＤＬｓを、ログ出力レベルＬＶの変化量ＤＬＶの伝播先のログ出力装置１２に送信する。すなわち、ログ出力装置１２は、ログ出力レベルＬＶの変化量ＤＬＶの伝播元のログ出力装置１２から、伝播レベルＤＬｒを受ける。
【０１０４】
処理Ｓ３５０では、レベル変更部３２は、処理Ｓ３２０で算出したログ出力レベルＬＶ（ログ発生頻度ＦＱに基づくログ出力レベルＬＶ）を、処理Ｓ３４０で受信した伝播レベルＤＬｒを用いて補正する。図９のログ出力レベルＬＶｆｑは、処理Ｓ３２０で算出したログ出力レベルＬＶ（補正前のログ出力レベルＬＶ）を示している。
【０１０５】
例えば、レベル変更部３２は、処理Ｓ３２０で算出したログ出力レベルＬＶｆｑに処理Ｓ３４０で受信した伝播レベルＤＬｒを加算する。ログ出力レベルＬＶｆｑと伝播レベルＤＬｒとの加算結果は、補正後のログ出力レベルＬＶである。なお、レベル変更部３２は、複数の伝播レベルＤＬｒを受けたとき、全ての伝播レベルＤＬｒをログ出力レベルＬＶｆｑに加算する。なお、例えば、ログ出力レベルＬＶｆｑと伝播レベルＤＬｒとの加算結果がログレベルで定義されていない値（例えば、整数以外）のとき、レベル変更部３２は、加算結果に最も近いログレベルを、ログ出力レベルＬＶとして算出する。
【０１０６】
処理Ｓ３６０では、ログ出力装置１２は、対象プログラム（モジュール１００の動作）が終了したか否かを判定する。対象プログラムが終了していないとき（処理Ｓ３６０のＮｏ）、ログ出力装置１２の動作は、処理Ｓ３１０に移る。一方、対象プログラムが終了しているとき（処理Ｓ３６０のＹｅｓ）、ログ出力装置１２は、一連の処理を終了する。
【０１０７】
このように、レベル変更部３２は、ログ発生頻度ＦＱに基づいて算出したログ出力レベルＬＶを、データを送信するモジュール１００とデータを受信するモジュール１００との間の依存関係に基づいて、補正する。例えば、図８のモジュール１００ａのログ出力レベルＬＶが“ＬＶａ”から“ＬＶａ＋ＤＬＶａ”に遷移したとき、モジュール１００ａにデータを送信するモジュール１００ｄのログ出力レベルＬＶを“ＬＶｄ”から“ＬＶｄ＋Ｗａｄ・ＤＬＶａ”に遷移させる。
【０１０８】
この実施形態では、レベル変更部３２は、データを受信したモジュール１００のログ出力レベルＬＶの変化量ＤＬＶ（調整量）に基づいて、データを送信したモジュール１００のログ出力レベルＬＶを補正する。これにより、この実施形態では、例えば、異常データの受信によりモジュール１００のログ出力レベルＬＶがレベルダウンしたとき、異常データを送信したモジュール１００のログ出力レベルＬＶもレベルダウンさせることができる。この結果、問題の原因特定に必要な情報（ログＬＧ）を増加させることができる。
【０１０９】
なお、ログ出力装置１２の動作は、この例に限定されない。例えば、モジュール１００とログ出力装置１２とが組み込まれるシステム（コンピュータ）は、対象プログラムの実行（処理Ｓ３１０）とログ出力レベルＬＶの調整および補正等の処理（Ｓ３２０−Ｓ３５０）とを互いに異なるスレッドで実施してもよい。すなわち、ログ出力装置１２等は、図４および図５に示した動作に基づいて、処理Ｓ３１０、Ｓ３２０を実施してもよい。このときには、例えば、図４および図５の処理Ｓ１５０、Ｓ１７０の代わりに、図６の処理Ｓ１５０ａ、Ｓ１７０ａが実施される。
【０１１０】
図１０は、図７に示したログ出力装置１２が組み込まれるシステムＳＹＳの一例を示している。図１０の実線の矢印は、モジュール１００間のデータフローを示し、破線の矢印は、ログ出力レベルＬＶの変化量（調整量）の伝播（伝播レベルＤＬの流れ）を示している。なお、図１０では、図を見やすくするために、モジュール１００およびログ出力装置１２をセンサ２００のみに記載している。例えば、ロボット制御部２１０等もモジュール１００およびログ出力装置１２を有している。
【０１１１】
システムＳＹＳは、センサ２００、ロボット制御部２１０および位置推定部２２０、経路計画部２３０を有している。システムＳＹＳは、センサ２００、ロボット制御部２１０、位置推定部２２０および経路計画部２３０を並列実行し、ロボットを自律移動させる。
【０１１２】
センサ２００は、カメラ等のセンサであり、画像情報等のセンサデータＳＤＡＴＡを位置推定部２２０に出力する。ロボット制御部２１０は、例えば、角速度等の指示を示す速度データＶＤＡＴＡを経路計画部２３０から受け、速度データＶＤＡＴＡに基づいて車輪等を制御する。そして、ロボット制御部２１０は、車輪の回転数等から計算したオドメトリデータＯＤＡＴＡを、位置推定部２２０に出力する。
【０１１３】
位置推定部２２０は、センサ２００から受けたセンサデータＳＤＡＴＡおよびロボット制御部２１０から受けたオドメトリデータＯＤＡＴＡに基づいて、自己の位置や姿勢等を推定する。そして、位置推定部２２０は、自己の位置等を示す位置データＰＤＡＴＡを経路計画部２３０に出力する。経路計画部２３０は、位置推定部２２０から受けた位置データＰＤＡＴＡに基づいて、局所経路の計画を立てる。そして、経路計画部２３０は、局所経路計画に基づく速度データＶＤＡＴＡを、ロボット制御部２１０に出力する。
【０１１４】
システムＳＹＳでは、例えば、位置推定部２２０のログ出力レベルＬＶの変化は、ロボット制御部２１０およびセンサ２００のログ出力レベルＬＶに反映される。例えば、ロボット制御部２１０から異常なデータＯＤＡＴＡを受けた位置推定部２２０が異常終了したとき、異常終了等の原因を特定するためには、ロボット制御部２１０の情報（ログＬＧ）も必要である。
【０１１５】
このときにも、この実施形態では、ロボット制御部２１０のログ出力レベルＬＶが位置推定部２２０のログ出力レベルＬＶの変化量に応じて補正されるため、ロボット制御部２１０から多くの情報（詳細なログＬＧ）を得ることができる。なお、反映の度合い（伝播レベルＤＬ）は、ロボット制御部２１０およびセンサ２００で互いに同じ値でもよいし、データＯＤＡＴＡ、ＳＤＡＴＡのデータ量の割合に応じた値でもよい。
【０１１６】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。さらに、この実施形態では、ログ出力装置１２は、モジュール１００間の依存関係に応じて、各モジュール１００のログ出力レベルＬＶの変化量ＤＬＶを、そのモジュール１００の前段のモジュール１００のログ出力レベルＬＶに反映する。これにより、この実施形態では、モジュール１００の異常終了等の原因を、データ出力元のモジュール１００まで戻って調査するときにも、問題の原因特定に必要な情報（ログＬＧ）を与えることができる。
【０１１７】
以上の実施形態において説明した発明を整理して、付記として開示する。
（付記１）
監視対象のモジュールで生成されるログの発生頻度を計算する頻度検出部と、
ログ出力の基準となるログ出力レベルを、前記発生頻度に基づいて調整するレベル変更部と、
前記ログ出力レベル以上の重要度の前記ログを出力するログ出力部と
を備えていることを特徴とするログ出力装置。
（付記２）
前記モジュールが複数のとき、前記レベル変更部は、前記発生頻度に基づいて調整した前記ログ出力レベルを、前記モジュール間の依存関係に応じて補正すること
を特徴とする付記１記載のログ出力装置。
（付記３）
前記モジュール間の依存関係は、データを送信する前記モジュールと前記データを受信する前記モジュールとの間の依存関係であり、
前記レベル変更部は、前記データを受信した前記モジュールの前記ログ出力レベルの調整量に基づいて、前記データを送信した前記モジュールの前記ログ出力レベルを補正すること
を特徴とする付記２記載のログ出力装置。
（付記４）
前記レベル変更部は、前記ログ出力レベルの補正量を、前記モジュール間の依存度に基づいて重み付けすること
を特徴とする付記２または付記３記載のログ出力装置。
（付記５）
コンピュータによって実行されるログ出力方法であって、
監視対象のモジュールで生成されるログの発生頻度を計算し、
ログ出力の基準となるログ出力レベルを、前記発生頻度に基づいて調整し、
前記ログ出力レベル以上の重要度の前記ログを出力すること
を特徴とするログ出力方法。
（付記６）
前記モジュールが複数のとき、前記発生頻度に基づいて調整した前記ログ出力レベルを、前記モジュール間の依存関係に応じて補正すること
を特徴とする付記５記載のログ出力方法。
（付記７）
前記モジュール間の依存関係は、データを送信する前記モジュールと前記データを受信する前記モジュールとの間の依存関係であり、
前記データを受信した前記モジュールの前記ログ出力レベルの調整量に基づいて、前記データを送信した前記モジュールの前記ログ出力レベルを補正すること
を特徴とする付記６記載のログ出力方法。
（付記８）
前記ログ出力レベルの補正量を、前記モジュール間の依存度に基づいて重み付けすること
を特徴とする付記６または付記７記載のログ出力方法。
（付記９）
コンピュータに実行させるログ出力プログラムであって、
前記コンピュータを付記１ないし付記４のいずれか１項に記載のログ出力装置として動作させるログ出力プログラム。
（付記１０）
監視対象のモジュールで生成されるログの発生頻度を計算する頻度検出処理と、
ログ出力の基準となるログ出力レベルを、前記発生頻度に基づいて調整するレベル変更処理と、
前記ログ出力レベル以上の重要度の前記ログを出力するログ出力処理と
をコンピュータに実行させることを特徴とするログ出力プログラム。
（付記１１）
前記モジュールが複数のとき、前記発生頻度に基づいて調整した前記ログ出力レベルを、前記モジュール間の依存関係に応じて補正すること
を特徴とする付記１０記載のログ出力プログラム。
（付記１２）
前記モジュール間の依存関係は、データを送信する前記モジュールと前記データを受信する前記モジュールとの間の依存関係であり、
前記データを受信した前記モジュールの前記ログ出力レベルの調整量に基づいて、前記データを送信した前記モジュールの前記ログ出力レベルを補正すること
を特徴とする付記１１記載のログ出力プログラム。
（付記１３）
前記ログ出力レベルの補正量を、前記モジュール間の依存度に基づいて重み付けすること
を特徴とする付記１１または付記１２記載のログ出力プログラム。
【０１１８】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずであり、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１１９】
１０、１２‥ログ出力装置；２０‥頻度検出部；３０、３２‥レベル変更部；４０‥ログ出力部；１００‥モジュール；２００‥センサ；２１０‥ロボット制御部；２２０‥位置推定部；２３０‥経路計画部；ＳＹＳ‥システム
【図１】
0005906883.tif 000002
【図２】
0005906883.tif 000003
【図３】
0005906883.tif 000004
【図４】
0005906883.tif 000005
【図５】
0005906883.tif 000006
【図６】
0005906883.tif 000007
【図７】
0005906883.tif 000008
【図８】
0005906883.tif 000009
【図９】
0005906883.tif 000010
【図１０】
0005906883.tif 000011