(57)【要約】【課題】メソッドの入力値や内部状態によって障害が発生するような場合においても適切なログの出力条件を設定して詳細なログを出力可能とする。【解決手段】コンテキスト取得部１０２は、ログ取得対象の呼び出しの際に、呼び出しのコンテキストを取得する。ログ出力条件設定部１０３は、ログ取得対象に対する呼び出しのコンテキストと処理結果とを対応づけた情報を蓄積した蓄積情報１０６、および、取得したコンテキストに基づき、ログ取得対象におけるログの出力条件１０８を設定する。【選択図】図１
2015075964.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
ログ取得対象の呼び出しの際に、前記呼び出しのコンテキストを取得し、
前記ログ取得対象に対する呼び出しのコンテキストと処理結果とを対応づけた情報を蓄積した蓄積情報、および、取得した前記コンテキストに基づき、当該ログ取得対象におけるログの出力条件を設定する、
ことを含む処理を実行させることを特徴とするログ出力条件設定プログラム。
【請求項２】
前記呼び出しのコンテキストと処理結果とを対応づけた情報を前記蓄積情報に蓄積する、
ことを含む処理を前記コンピュータに実行させることを特徴とする請求項１に記載のログ出力条件設定プログラム。
【請求項３】
前記コンテキストは、前記ログ取得対象が呼び出されるときの入力値と、前記ログ取得対象の呼出し経路を含み、
前記ログ取得対象に対する呼び出しの入力値と処理結果とを対応づけた情報を蓄積した入力値蓄積情報、および、取得した前記入力値に基づいて、または、前記ログ取得対象に対する呼出し経路と処理結果とを対応づけた情報を蓄積した呼出し経路蓄積情報、および、取得した前記呼出し経路に基づいて、前記ログの出力条件を設定する、
ことを含む処理を前記コンピュータに実行させることを特徴とする請求項１または２のいずれかに記載のログ出力条件設定プログラム。
【請求項４】
前記ログ取得対象が前記コンピュータまたは他のコンピュータ上で実行される他のプログラムから呼び出されるときに、前記他のプログラムから前記ログ取得対象への呼出しに含めてログ制御情報を伝播し、当該ログ制御情報を用いて前記ログ取得対象における前記ログの出力条件を設定する、
ことを含む処理を実行させることを特徴とする請求項１ないし３のいずれかに記載のログ出力条件設定プログラム。
【請求項５】
前記ログ制御情報は、前記他のプログラムにおいて設定されたログの出力条件を含み、
当該ログ取得対象に対応して設定したログの出力条件と、前記他のプログラムから伝播された前記他のプログラムのログの出力条件とを比較して、当該ログ取得対象における最終的なログの出力条件を設定する、
ことを含む処理を実行させることを特徴とする請求項４に記載のログ出力条件設定プログラム。
【請求項６】
前記ログ制御情報は、前記他のプログラムの呼出し経路を含み、
前記ログ取得対象が呼び出される際に、前記他のプログラムの呼出し経路を当該ログ取得対象の呼出し経路の先頭に付加して、当該ログ取得対象の新たな呼出し経路とし、
前記新たな呼出し経路を前記ログ取得対象の呼出し経路と処理結果とを対応づけた呼出し経路蓄積情報を参照して判断することにより、前記ログの出力条件を設定する、
ことを含む処理を前記コンピュータに実行させることを特徴とする請求項４に記載のログ出力条件設定プログラム。
【請求項７】
ログ取得対象の呼び出しの際に、前記呼び出しのコンテキストを取得するコンテキスト取得部と、
前記ログ取得対象に対する呼び出しのコンテキストと処理結果とを対応づけた情報を蓄積した蓄積情報、および、取得した前記コンテキストに基づき、当該ログ取得対象におけるログの出力条件を設定するログ出力条件設定部と、
を備えることを特徴とするログ出力条件設定装置。
【請求項８】
ログ取得対象の呼び出しの際に、前記呼び出しのコンテキストを取得し、
前記ログ取得対象に対する呼び出しのコンテキストと処理結果とを対応づけた情報を蓄積した蓄積情報、および、取得した前記コンテキストに基づき、当該ログ取得対象におけるログの出力条件を設定する、
ことを特徴とするログ出力条件設定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ログの出力条件を設定するプログラム、装置、および方法に関する。
【背景技術】
【０００２】
多くのコンピュータは、何らかの種類のログを出力する機能を備える。ログに含まれる情報は、例えば、障害が発生した際に障害の原因を究明するうえで有益である。しかし、ログを出力する処理はオーバヘッドの一種であるから、不必要に多くの情報を含むログを出力することは好ましくない。
【０００３】
そこで、システムの状態を認識するためのログ取得では、目的（保存容量、ログ取得による性能劣化）に応じたログレベルの設定により、出力されるログの容量を制限している。障害等が発生した場合には、詳細なログ（高いログレベル）が必要となり、ログレベルの設定を適切なものとするため、アプリケーションの実行実績等の情報が用いられる。
【０００４】
従来、イベントログに出力させる箇所を、効率よく限定したり、動的に変更可能としたりするロギングシステムが提案されている（例えば特許文献１）。当該ロギングシステムでは、ログ管理プログラムがログ出力設定テーブルの内容を参照して対象メソッドの呼び出し起点と終了を把握する。
【０００５】
また、アプリケーションプログラムの実行中のチェックポイントのデータをリアルタイムにロギングするロギング装置が提案されている（例えば特許文献２）。当該ロギング装置では、アプリケーションプログラム中には、予め外部から設定されるログ出力条件と、各チェックポイントにおいて呼び出される複数のログ出力関数とが組み込まれる。通常時はログ出力関数のパラメータで指定されたエラーレベルが通常時ログ出力条件に合致する場合のみログ出力される。トリガーレベルに合致するエラーレベルが発生した場合には、異常時ログ出力レベルに合致したエラーレベルの詳細ログが出力される。
【０００６】
サーバの稼働性をあげることを目的とし、クライアントコンピュータから出力される
要求に対して応答処理を実行する以下のような情報処理装置も提案されている（例えば特許文献３）。この情報処理装置は、クライアントコンピュータから出力される要求に対する応答処理を実行させるための第１プログラムを格納する記憶装置と、演算処理装置を備える。この演算装置は、クライアントコンピュータから第１要求を受け取ると、第１プログラム及び第１要求を複製し、第１プログラムの複製である第２プログラムを実行して、第１要求に対する第１プログラムの応答処理を監視する。この演算装置は、第１プログラムの応答処理の障害を検出した場合、第２プログラムを実行して、第１要求の複製である第２要求に対する応答処理を行う。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００４−０９４３７４号公報
【特許文献２】特開２００９−２０５４８８号公報
【特許文献３】特開２０１２−１８５１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、対象メソッドに応じてログの出力状態を限定したり、チェックポイントのログのみを出力する方式では、メソッドの入力値や内部状態によって障害が発生するような場合に詳細なログ出力を得ることができないという問題点を有していた。
【０００９】
また、プログラムを複製して障害に対処する方式では、複製処理のオーバヘッドが大きいという問題点を有していた。
【００１０】
そこで、１つの側面では、メソッドの入力値や内部状態によって障害が発生するような場合においても詳細なログを出力可能とすることを目的とする。
【課題を解決するための手段】
【００１１】
態様の一例であるログ出力条件設定プログラムでは、コンピュータに、ログ取得対象の呼び出しの際に、呼び出しのコンテキストを取得し、ログ取得対象に対する呼び出しのコンテキストと処理結果とを対応づけた情報を蓄積した蓄積情報、および、取得したコンテキストに基づき、そのログ取得対象におけるログの出力条件を設定することを含む処理を実行させる。
【発明の効果】
【００１２】
メソッドの入力値や内部状態によって障害が発生するような場合においても詳細なログを出力することが可能となる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施形態に係る情報処理装置の処理機能の構成例を示すブロック図である。
【図２】引数（入力値）によってログレベルを制御する例を示す図である。
【図３】内部状態によってログレベルを制御する例を示す図である。
【図４】プロセス間でログ制御情報を伝播してログレベルを制御する例を示す図である。
【図５】第２、第３の実施形態に係る情報処理システムのシステム構成例を示す図である。
【図６】第２の実施形態に係るホストサーバの処理機能の構成例を示すブロック図である。
【図７】値範囲実績テーブルのデータ構成例を示す図である。
【図８】呼出し経路実績リストテーブルのデータ構成例を示す図である。
【図９】ログレベル設定部の処理例を示すフローチャートである。
【図１０】処理結果判定部の処理例を示すフローチャートである。
【図１１】第３の実施形態に係るホストサーバの処理機能の構成例を示すブロック図である。
【図１２】ログ制御情報通信部の送信処理例を示すフローチャートである。
【図１３】ログ制御情報通信部の第１の受信処理例を示すフローチャートである。
【図１４】ログ制御情報通信部の第２の受信処理例を示すフローチャートである。
【図１５】第１の実施形態に係る情報処理装置のハードウェア構成例を示す図である。
【発明を実施するための形態】
【００１４】
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。
一般的には、障害発生の直接的な要因が、障害が発生したメソッド自身ではなく、入力値によるものである場合、例えば、Ｗｅｂアプリケーションやデータベース処理における入力値（リクエストパラメタやＳＱＬ文)等の場合、アプリケーションの実行実績を用いてログレベルを下げていると、障害の解析に必要なログレベルとはならない（外部変数により、障害発生の状況が異なる）。
【００１５】
また、障害発生の直接的な要因が、入力値そのものではなく、メソッドが扱う内部の状態（たとえば、使用しているメモリの状態）によるものである場合も存在するが、外部より直接的に得られる情報から、内部の状態に応じて、ログレベルを変更することは困難である。
【００１６】
さらに、ログを全て詳細に出力し、メソッドの実行結果に応じて、特定のログのみ、詳細出力から取り出す手法も存在するが、ログを全て詳細に出力することによる、入出力等の性能劣化が問題となり、容易には採用できない。
【００１７】
図１は、上述のような課題を解決するための第１の実施形態に係る情報処理装置１００の処理機能の構成例を示すブロック図である。
【００１８】
情報処理装置１００は、ログ取得対象処理部１０１、コンテキスト取得部１０２、ログ出力条件設定部１０３、ログ出力部１０４、および処理結果判定部１０５を備える。
【００１９】
ログ取得対象処理部１０１は、情報処理装置１００上での実行の単位であるログ取得対象を実行して処理する。ログ取得対象は例えば、後述する図１５のＣＰＵ１５０１が外部記憶装置１５０５からメモリ１５０２に読み出して実行するプログラムであるプロセス、スレッド、アプリケーションプログラム、プログラムモジュール、関数プログラム、プロシージャ、またはオブジェクト指向言語で記述されるクラスにおいて定義されるメソッドのうちのいずれかである。
【００２０】
コンテキスト取得部１０２は、ログ取得対象の呼び出しの際に、呼び出しのコンテキストを取得する。コンテキストは例えば、ログ取得対象が呼び出されるときにログ取得対象に対して引数として与えられる入力値またはログ取得対象の呼出し経路のうち少なくとも１つを含む。ここで、コンテキストが例えばログ取得対象の引数の入力値であるときには、その入力値の値の範囲が判定される。また、コンテキストが例えばログ取得対象の呼出し経路である場合には、ログ取得対象の具体的な呼出し関係、すなわち、ログ取得対象が呼び出されるまでに、どのプログラムが順に呼び出されてきたかが抽出される。
【００２１】
ログ出力条件設定部１０３は、ログ取得対象に対する呼び出しのコンテキストと処理結果とを対応づけた情報を蓄積した蓄積情報１０６、および、取得したコンテキストに基づき、そのログ取得対象におけるログの出力条件１０８を設定する。
【００２２】
ログ出力部１０４は、ログ出力条件設定部１０３が設定したログの出力条件１０８のもとで、ログ取得対象処理部１０１が実行しているログ取得対象に対応するログ１０９を、ログファイル１１０に出力する。
【００２３】
処理結果判定部１０５は、呼び出しのコンテキストと処理結果を対応づけた情報を蓄積情報１０６に蓄積する。
【００２４】
図１の構成において、情報処理装置１００は、ログ制御情報通信部１０７を備えてよい。このログ制御情報通信部１０７は、ログ取得対象が情報処理装置１００または他の情報処理装置上で実行される他のプログラムから呼び出されるときに、他のプログラムからログ取得対象への呼出しに含めて伝播されるログ制御情報を通信する。この場合、ログ出力条件設定部１０３は、このログ制御情報を用いてログ取得対象におけるログの出力条件を設定してよい。
【００２５】
このように、複数の機器が連関して動作する場合は、「処理結果を受け渡す側」のプログラム（ログ取得対象）におけるログレベル判断結果（ログ取得条件）を、ログ制御情報として「処理結果を受け取る側」のプログラムに伝播させるように構成できる。これにより、「処理結果を受け取る側」において、処理開始時から必要なログレベルを設定させることが可能となる。
【００２６】
上述の１０１、１０２、１０３、１０４、１０５、または１０７の各処理部は例えば、後述する図１５のＣＰＵ１５０１が、外部記憶装置１５０５からメモリ１５０２に読み出した各処理部に対応する処理プログラムを実行することにより実現される。
【００２７】
図１の構成を有する情報処理装置１００の処理機能につき、以下に詳細に説明する。
第１の実施形態に係る図１の処理機能は、メソッド等のログ取得対象における異常な入力値や異常な内部状態においても、適切にログレベル等のログの出力条件１０８を変更可能とすることにより、異常の発生(または予兆)時の詳細ログ出力の精緻性を向上させるものである。
【００２８】
そのために、第１の実施形態に係る図１の処理機能では、ログの出力条件１０８の変更の判断を、引数の入力値や呼出し経路等の内部状態を加味した、動的なコンテキストにより行う方式(論理)を用いる。
【００２９】
例えば、ログ取得対象をメソッドとする。この場合、ログ取得対象処理部１０１は、ＪＶＭ（Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ。ＪａｖａはＯｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎの登録商標。）処理部等の、メソッドの実行部である。また、コンテキスト取得部１０２は、メソッドの呼び出しの際に、引数として与えられる入力値またはそのメソッドの呼出し経路等のコンテキストを取得する。そして、ログ出力条件設定部１０３は、メソッドのコンテキストと正常または異常等の処理結果とを対応づけた情報を蓄積した蓄積情報１０６、および上述の取得したコンテキストに基づき、ログ１０９の出力条件１０８を設定する。この出力条件１０８は例えば、そのメソッドが実行されるときにログ出力部１０４が例えばログファイル１１０として出力するログ１０９の出力の詳細度を示すログレベルである。なお、ログの出力条件１０８としては、ログレベルが一般的であるが、そのほか、ログ１０９を出力するかしないか等の条件や、ログ１０９の出力フォーマット等の条件を含んでもよい。
【００３０】
メソッドの呼出し時にコンテキスト取得部１０２で取得されるコンテキストが、例えば引数として与えられる入力値とそのメソッドの呼出し経路である場合には、ログ出力条件設定部１０３は、より具体的には、例えば次のような制御を行ってよい。
【００３１】
まず、ログ出力条件設定部１０３は、蓄積情報１０６の一部であるメソッドの入力値と処理結果とを対応づけた情報を蓄積した入力値蓄積情報、および、入力値に基づき、ログの出力条件１０８を設定する。
【００３２】
例えば、メソッド呼出し時の引数の値がプリミティブな型(数値や文字列など)を有する場合、ログ出力条件設定部１０３は、その引数の値の範囲を判断することができる。このような場合には、ログ出力条件設定部１０３は、引数の値の範囲を判断し、その判断結果を例えばログレベルの変更の要否判断に用いる。
【００３３】
図２は、引数（入力値）によってログレベルを制御する例を示す図である。
ログ出力条件設定部１０３は、蓄積情報１０６の一部である入力値蓄積情報を参照した結果、引数である入力値の範囲が過去に処理実績のある値の範囲にある場合には、ログ出力部１０４に対して低いログレベルが設定される方向に制御をしてよい。例えば図２（ａ）に示されるように、メソッドであるｍｅｔｈｏｄＡやｍｅｔｈｏｄＢが呼び出されるときの入力値ｘ１やｙ１の値の範囲が過去に処理実績のある値の範囲にある場合には、ログレベルが低くなる方向に制御をしてよい。この結果、ログファイル１１０におけるログ出力量は低減される。
【００３４】
逆に、引数である入力値の範囲が過去に処理実績のない値の範囲にある場合には、ログ出力条件設定部１０３は、ログ出力部１０４に対して高いログレベルが設定される方向に制御をしてよい。例えば図２（ｂ）に示されるように、ｍｅｔｈｏｄＡやｍｅｔｈｏｄＢが呼び出されるときの入力値ｘ２やｙ２の値の範囲が過去に処理実績のない値の範囲にある場合には、ログレベルが高くなる方向に制御をしてよい。この結果、ログファイル１１０には詳細ログが出力される。
【００３５】
一般に、メソッド呼出し時の入力値の範囲が過去に処理実績のない値の範囲にある場合には、その入力値は異常値である可能性が高く、ログ取得対象処理部１０１がそのメソッドを実行した場合にエラーが発生する確率が高くなると考えることができる。従って、メソッド呼出し時の入力値の範囲が過去に処理実績のない値の範囲にある場合には、ログレベルが高くなる方向に制御をすることにより、エラー発生時により詳細なログ１０９を取得することが可能となる。
【００３６】
次に、蓄積情報１０６の一部であるメソッドの入力値と処理結果とを対応づけた入力値蓄積情報を参照して、ログの出力条件１０８を設定できない場合がある。
【００３７】
例えば、メソッド呼出し時の引数の値が数値や文字列等のプリミティブな型ではない、または文字列であってもその形式(フォーマット)が複雑である、または、直接引数として値を渡さない場合には、入力値による判断を行うことができない。このようなケースとしては例えば、引数がデータベースを検索するためのＳＱＬ文である場合や、引数が他の変数を参照するポインタ値である場合などがある。
【００３８】
このような場合にもログの出力条件１０８を設定できるように、ログ出力条件設定部１０３は、呼び出されたメソッドの呼出し経路を、蓄積情報１０６の一部であるメソッドの呼出し経路と処理結果とを対応づけた情報を蓄積した呼出し経路蓄積情報を参照して判断する。
【００３９】
ログ出力条件設定部１０３は、メソッドの入力値の範囲を判断できた場合には、その判断結果と、上述の呼出し経路の判断結果の両方を用いて、ログの出力条件１０８を設定する。一方、ログ出力条件設定部１０３は、メソッドの入力値の範囲を判断できなかった場合には、上述の呼出し経路の判断結果のみを用いて、ログの出力条件１０８を設定する。
【００４０】
あるいは、ログ出力条件設定部１０３は、次のような制御を行ってもよい。ログ出力条件設定部１０３は、入力値蓄積情報を参照してログの出力条件１０８の設定を試みる。一方、この設定が可能でない場合には、呼び出されたメソッドの呼出し経路を経路蓄積情報を参照して、ログの出力条件１０８を設定する。
【００４１】
メソッドの呼出し経路としては、呼出し元のメソッドと呼出し先の（呼び出された）メソッド間の接続関係のみではなく、その一連の処理開始からある時点までの呼出し経路を用いる。このような呼出し経路は例えば、コールスタックを参照することにより、取得することができる。勿論、コールスタック以外の手段を用いて、メソッドの呼出し経路を取得してもよい。
【００４２】
ログ出力条件設定部１０３は、蓄積情報１０６の一部である呼出し経路蓄積情報を参照した結果、呼び出されたメソッドの呼出し経路が過去に呼出し実績のある経路である場合には、ログ出力部１０４に低いログレベルが設定される方向に制御をする。図３は、内部状態によってログレベルを制御する例を示す図である。例えば図３（ａ）に示されるように、ある内部状態αにおけるｍｅｔｈｏｄＡからｍｅｔｈｏｄＢの呼出し経路が、呼出し経路蓄積情報を参照した結果、過去に呼出し実績があれば、ログの出力条件１０８であるログレベルが低くなる方向に制御がされる。この結果、ログファイル１１０におけるログ出力量は低減される。
【００４３】
逆に、呼び出されたメソッドの呼出し経路が過去に呼出し実績のない経路である場合には、ログ出力条件設定部１０３は、ログ出力部１０４に高いログレベルが設定される方向に制御をする。例えば図３（ｂ）に示されるように、内部状態αとは異なる別の内部状態βでは、ｍｅｔｈｏｄＡからｓｕｂＭｅｔｈｏｄＣが呼ばれ内部状態γとなったのち、ｍｅｔｈｏｄＢが呼ばれるような場合を考える。この場合、呼出し経路蓄積情報を参照した結果、ｍｅｔｈｏｄＡ⇒ｓｕｂＭｅｔｈｏｄＣという呼出し経路が過去に呼出し実績がなければ、ｓｕｂＭｅｔｈｏｄＣが呼び出された時点のログの出力条件１０８であるログレベルは高くなる。同様に、呼出し経路蓄積情報を参照した結果、ｍｅｔｈｏｄＡ⇒ｓｕｂＭｅｔｈｏｄＣ⇒ｍｅｔｈｏｄＢという呼出し経路も過去に呼出し実績がなければ、ｍｅｔｈｏｄＢが呼び出された時点のログの出力条件１０８であるログレベルは高くなる方向に制御がされる。これらの場合には、ログファイル１１０には詳細ログが出力される。
【００４４】
一般に、メソッドが通常とは異なる呼出し経路で呼び出された場合には、異常な内部状態になっている可能性が高く、ログ取得対象処理部１０１がそのメソッドを実行した場合にエラーが発生する確率が高くなると考えることができる。従って、メソッドの呼出し経路が過去に呼出し実績がない場合には、ログレベルが高くなる方向に制御を行うことにより、エラー発生時により詳細なログ１０９を取得することが可能となる。
【００４５】
以上のように、第１の実施形態に係る図１の処理機能では、ログの出力条件１０８の変更の判断が、引数の入力値や呼出し経路等の内部状態を加味した動的なコンテキストについて行われる。これにより、異常な入力値または異常な内部状態の発生時にログレベルを引き上げることが可能となり、異常の発生(または予兆)時の詳細ログ出力の精緻性を向上させることが可能となる。
【００４６】
第１の実施形態に係る図１の処理機能において、ログ出力条件設定部１０３が、引数の入力値の範囲についての判断結果と呼出し経路の判断結果をどのように組み合わせてログレベル等のログの出力条件１０８を設定する制御を行うかは、上述の組合せの他にも、様々な組合せを採用することができる。
【００４７】
ここで、現実には、例えばメソッド等のプログラムの処理は、１つのプログラム内に閉じず、プログラム間(プロセス間、計算機間など含む)を跨って処理結果の受け渡しが行われる場面が多い。このとき、受け渡される情報（引数）についてその入力値の範囲の判断が可能な場合には、処理結果を受け取る側のプログラムにおいて、ログレベルの高低の判断は、引数の入力値の範囲を判断することにより、即座に行える。つまり異常が発生する可能性(予兆)がある場合には、プログラムの処理を開始した時点から高いログレベルに設定することが可能である。一方、受け渡される情報（引数）についてその入力値の範囲の判断ができない場合には、処理結果を受け取る側のプログラムの内部状態が「過去に呼出し実績がない」経路となるまでは、ログレベルは低いままとなる。
【００４８】
この課題を解決するために、第１の実施形態に係る図１の処理機能では、ログ制御情報通信部１０７が設けられてよい。ログ制御情報通信部１０７は、例えばメソッドが情報処理装置１００自身のコンピュータまたは他のコンピュータ上で実行される他のプログラム（例えばメソッド）から呼び出されるときに、他のプログラムからメソッドへの呼出しに含めてログ制御情報を伝播する。そして、ログ出力条件設定部１０３は、そのログ制御情報を用いて呼び出されたメソッドにおけるログの出力条件１０８を決定し、ログ出力部１０４に設定する。
【００４９】
ログ制御情報は例えば、呼出し元であるプロセス１（他のプログラム）において設定されたログレベル（ログの出力条件）であってよい。図４は、プロセス間でログ制御情報を伝播してログレベルを制御する例を示す図である。この場合、ログ出力条件設定部１０３は、呼び出されたプロセス２（ログ取得対象）に対応して暫定的に設定したログレベルと、プロセス１から伝播されたプロセス１で設定されたログレベルとを比較して、プロセス２における最終的なログレベルを設定する、より具体的には、ログ出力条件設定部１０３は、プロセス２に対応して暫定的に設定したログレベルと、プロセス１から伝播されたログレベルのうち、より高いほうのログレベルを最終的なログレベルとして設定する。
【００５０】
或いは、ログ制御情報は例えば、呼出し元であるプロセスまたはメソッド（他のプログラム）の呼出し経路を含んでよい。この場合、ログ出力条件設定部１０３は、プロセスまたはメソッド（ログ取得対象）が呼び出される際に、次の制御を実行する。ログ出力条件設定部１０３は、呼出し元のプロセスまたはメソッドから伝播された当該呼出し元のプロセスまたはメソッドの呼出し経路を、当該呼び出されたプロセスまたはメソッドの呼出し経路の先頭に付加して、新たな呼出し経路とする。そして、ログ出力条件設定部１０３は、その新たな呼出し経路が、当該呼び出されたプロセスまたはメソッドの呼出し経路と処理結果とを対応づけた呼出し経路蓄積情報に含まれるか否かを判断することにより、ログレベルを設定する。
【００５１】
以上のように、第１の実施形態に係る図１の処理機能では、呼び出されたメソッド等におけるログレベル等が、呼出し元のメソッド等に対応するログレベルや呼出し経路等を加味して設定される。これにより、プログラム（プロセス、マシン）を跨いで異常の発生（または予兆）を伝播させることができ、情報処理システム全体として異常の発生（または予兆）をとらえて、詳細ログ出力の精緻性を向上させることが可能となる。
【００５２】
なお、呼び出されるログ取得対象と呼出し元のプログラムは、同一の情報処理装置１００（マシン）上で実行されるプロセス同士、スレッド同士、またはメソッド同士であってもよい。或いは、異なる情報処理装置１００（マシン）上で実行されるプロセス同士であってもよい。
【００５３】
異なる情報処理装置１００間で呼出し元のログレベルを伝播させる場合には、各情報処理装置１００に図１の処理機能が実装され、呼出し元のログレベルも図１の処理機能によって設定されてよい。この場合、呼出し元の情報処理装置１００のログ制御情報通信部１０７から呼出し先の情報処理装置１００のログ制御情報通信部１０７に、ログレベルや呼出し経路等のログ制御情報が伝播される。
【００５４】
同一の情報処理装置１００間でログ制御情報を伝播する場合、例えばＪＶＭ処理部にその一部またはミドルウェアとして付加される図１の処理機能のコンテキスト取得部１０２が、呼出し元と呼出し先の各プロセス、スレッド、またはメソッドを取得してよい。そして、ログ制御情報通信部１０７が、呼出し元と呼出し先の各プロセス、スレッド、またはメソッド間で、ログ制御情報であるログレベルや呼出し経路を引き渡す。
【００５５】
図５は、第２、第３の実施形態に係る情報処理システムのシステム構成例を示す図である。これらの実施形態では、図１に示される第１の実施形態に係る情報処理装置の処理機能と同等の処理機能が、仮想マシンを実現するホストサーバ５０１として実現されている。
【００５６】
情報処理システム５００は、ホストサーバ５０１と、複数のクライアント５０２と、管理端末５０３とが、ネットワーク５０４によって相互に接続された構成を有する。なお、ホストサーバ５０１、クライアント５０２、および管理端末５０３は、いずれも後述する図１５に示されるようなハードウェア構成例を有するコンピュータとして実現可能である。
【００５７】
ホストサーバ５０１は、ＪＶＭを構築し、ＪＶＭ上で各種のアプリケーションプログラムを実行することで、各クライアント５０２に対して各種のサービスを提供する。
【００５８】
クライアント５０２は、ホストサーバ５０１が提供するサービスを受けるユーザによって操作される端末装置であり、ユーザの操作に応じてホストサーバ５０１にアクセスする。
【００５９】
管理端末５０３は、ホストサーバ５０１の管理者によって操作される端末装置である。管理端末５０３は例えば、管理者からの操作に応じてホストサーバ５０１にアクセスし、ホストサーバ５０１に記録されたログファイルを読み出して、表示装置（例えば後述する図１５の出力装置１５０４を構成するディスプレイ装置）にログを表示する。管理者は、表示されたログに基づいて、ホストサーバ５０１で発生した障害に対処することができる。
【００６０】
図６は、第２の実施形態に係る図５のホストサーバ５０１の処理機能の構成例を示すブロック図である。
【００６１】
ホストサーバ５０１は、ＡＰＳ（ＡＰｐｌｉｃａｔｉｏｎ  Ｓｅｒｖｅｒ）処理部６０１と、ＪＶＭ処理部６０２を備える。また、ホストサーバ５０１の記憶装置（例えば後述する図１５の外部記憶装置１５０５またはメモリ１５０２）には、アプリケーションプログラム６０３、値範囲実績テーブル６０８、呼出し経路実績リストテーブル６０９、およびログファイル１１０が記憶される。
【００６２】
アプリケーションプログラム６０３は、第１の実施形態に係る図１の処理機能の構成例におけるログ取得対象に対応するものである。アプリケーションプログラム６０３は、ＪＶＭ処理部６０２によって構成されるＪａｖａ仮想マシン上で実行される。
【００６３】
ＪＶＭ処理部６０２の処理は、ホストサーバ５０１上で、プロセッサ（例えば後述する図１５のＣＰＵ１５０１）が、外部記憶装置（例えば後述する図１５の外部記憶装置１５０５）からメモリ（例えば後述する図１５のメモリ１５０２）にＪＶＭ処理プログラムを読み出して実行することで実現される。ＪＶＭ処理部６０２は、第１の実施形態に係る図１のログ取得対象処理部１０１に対応し、Ｊａｖａ仮想マシンとしての処理を実行する。ＪＶＭ処理部６０２は、ＡＰＳ処理部６０１を介してアプリケーションプログラム６０３のソースコードまたはネイティブコードを取得して実行し、アプリケーションプログラム６０３に従ったＪａｖａ仮想マシンとしての処理を実行する。アプリケーションプログラム６０３がソースコードである場合には、ＪＶＭ処理部６０２は、アプリケーションプログラム６０３を変換して得られる中間コード（バイトコード）を、インタープリタ方式で逐次解釈して実行する。アプリケーションプログラム６０３がネイティブコードである場合には、ＪＶＭ処理部６０２は、そのネイティブコードを直接実行する。なお、ＪＶＭ処理部６０２は、実行状況に応じて、ソースコードであるアプリケーションプログラム６０３の中間コードの所定範囲を、内部の特には図示しないＪＩＴ（Ｊｕｓｔ  Ｉｎ  Ｔｉｍｅ）コンパイラでネイティブコードにコンパイルしてから実行する。このようにして生成されたアプリケーションプログラム６０３のネイティブコードは、必要に応じて、記憶装置に記憶されて再利用される。
【００６４】
ＡＰＳ処理部６０１の処理は、ホストサーバ５０１上で、プロセッサが外部記憶装置からメモリにＡＰＳ処理プログラムを読み出して実行することで実現される。ＡＰＳ処理部６０１は、Ｊａｖａ仮想マシンの一部として実現されてもよく、或いは、Ｊａｖａ仮想マシンにアドオンされるミドルウェアとして実現されてもよい。ＡＰＳ処理部６０１は、Ｊａｖａ仮想マシン上でのアプリケーションプログラム６０３の実行状況を監視し、ログファイル６１２にログ６１１を出力する。ＡＰＳ処理部６０１は、メソッド呼出し認識部６０４、ログレベル設定部６０５、ログ出力部１０４、および処理結果判定部１０５を備える。
【００６５】
メソッド呼出し認識部６０４は、第１の実施形態に係る図１のコンテキスト取得部１０２に対応する。メソッド呼出し認識部６０４は、アプリケーションプログラム６０３の実行の単位であるメソッドの呼出しと、そのメソッドに引数として与えられる入力値を認識し取得する。
【００６６】
ログレベル設定部６０５は、第１の実施形態に係る図１のログ出力条件設定部１０３に対応する。ログレベル設定部６０５は、メソッド呼出し認識部６０４が呼出しを取得したメソッドの引数の入力値と呼出し経路を値範囲実績テーブル６０８および呼出し経路実績リストテーブル６０９を参照して判断する。これにより、ログレベル設定部６０５はそのメソッドに対応するログレベル６１０を決定し、ログ出力部６０６に設定する。
【００６７】
値範囲実績テーブル６０８および呼出し経路実績リストテーブル６０９は、第１の実施形態に係る図１の蓄積情報１０６に対応する。蓄積情報１０６は例えば、入力値蓄積情報および呼出し経路蓄積情報である。
【００６８】
ログ出力部６０６は、第１の実施形態に係る図１のログ出力部１０４に対応する。ログ出力部６０６は、ログレベル設定部６０５が設定したログレベル６１０で、ＪＶＭ処理部６０２が実行しているアプリケーションプログラム６０３のメソッドに対応するログ６１１を、ログファイル６１２に出力する。
【００６９】
処理結果判定部６０７は、第１の実施形態に係る図１の処理結果判定部１０５に対応する。処理結果判定部６０７は、呼び出されたメソッドの引数の入力値と処理結果（正常／異常）を、値範囲実績テーブル６０８に蓄積する（反映させる）。また、処理結果判定部６０７は、呼び出されたメソッドの呼出し経路と処理結果（正常／異常）を、呼出し経路実績リストテーブル６０９に蓄積する。
【００７０】
図７は、図６の値範囲実績テーブル６０８のデータ構成例を示す図である。
値範囲実績テーブル６０８は、第１のコンテキスト集合として、図７（ａ）に示される正常値範囲、または図７（ｂ）に示される正常長さおよび正常キャラクタを含むように構成される。第１のコンテキスト集合は、例えばメソッドが過去に呼び出されたことがあり、かつ、そのメソッドの１回以上の過去の呼出しのうち、正常な処理結果を生じさせた各呼出しにおけるコンテキストである引数の入力値に基づいて定まる。
【００７１】
各メソッドの引数の入力値が数値であった場合には、その正常な値の範囲を示す正常値範囲が、例えば下記１．から５．に示されるステップに従って、図７（ａ）に例示されるように、値範囲実績テーブル６０８に登録、拡張されてゆく。
１．初回：値域なし
２．０を処理⇒０を登録
３．―５を処理⇒正常値範囲：−５〜０に拡張
４．４を処理⇒正常値範囲：−５〜４に拡張
５．２０１２を処理⇒正常値範囲：−５〜２０１２に拡張 
【００７２】
図８（ａ）の例では、メソッドＡについては、引数の入力値が整数値０である場合に、メソッドＡの呼出し時の状態が正常であると判断できる。また、メソッドＢについては、引数の入力値が整数値−５から１０２４までの範囲にある場合に、メソッドＢの呼出し時の状態が正常であると判断できる。さらに、メソッドＣについては、引数の入力値が整数値１から６５５３５までの範囲にある場合に、メソッドＣの呼出し時の状態が正常であると判断できる。
【００７３】
また、引数が文字列の場合には、処理結果が正常であった長さ、および、正常に処理できた文字種別(キャラクタとしての値範囲)が、図７（ｂ）に例示されるように、値範囲実績テーブル６０８に登録されてゆく。図７（ｂ）の例では、メソッドＤの呼出し時には、引数の入力文字列が、長さが０〜２０文字の範囲で、「ａ」から「ｚ」までの小文字アルファベット文字、「＋」文字、または「＝」文字のいずれかのみを含む場合に、メソッドＤの呼出し時の状態が正常であると判断できる。また、メソッドＥの呼出し時には、引数の入力文字列が、長さが１〜２５６文字の範囲で、「ａ」から「ｚ」までの小文字アルファベット文字、または「Ａ」から「Ｚ」までの大文字アルファベット文字のいずれかのみを含む場合に、メソッドＥの呼出し時の状態が正常であると判断できる。
【００７４】
値範囲実績テーブル６０８は、上述の第１のコンテキスト集合に加えて、さらに第２のコンテキスト集合として、図７（ａ）に示される異常値範囲、または図７（ｂ）に示される異常キャラクタを含むように構成される。第２のコンテキスト集合は、例えばメソッドが過去に呼び出されたことがあり、かつ、そのメソッドの１回以上の過去の呼出しのうち、異常な処理結果を生じさせた各呼出しにおけるコンテキストである引数の入力値に基づいて定まる。各メソッドの引数の入力値が数値であった場合には、その異常な値の範囲を示す異常値範囲が、図７（ａ）に例示されるように、リスト形式でチェーンされて、登録、拡張されてゆく。図７（ａ）の例では、メソッドＡについては、異常値範囲は登録されていない。メソッドＢについては、引数の入力値が整数値０または２５６である場合に、メソッドＢの呼出し時の状態が異常であると判断できる。メソッドＣについては、引数の入力値が整数値０である場合に、メソッドＣの呼出し時の状態が異常であると判断できる。
【００７５】
また、引数が文字列の場合には、処理結果が異常であった長さ、および、異常に処理された文字種別(キャラクタとしての値範囲)が、図７（ｂ）に例示されるように、値範囲実績テーブル６０８に登録されてゆく。図７（ｂ）の例では、メソッドＤの呼出し時には、引数の入力文字列が「ｔａｂ」文字または空白文字のいずれかを含む場合に、メソッドＤの呼出し時の状態が異常であると判断できる。
【００７６】
図８は、呼出し経路実績リストテーブルのデータ構成例を示す図である。
呼出し経路実績リストテーブル６０９は、第１のコンテキスト集合として、図８（ｂ）に示されるような正常な呼出し経路を含むように構成される。第１のコンテキスト集合は、例えばメソッドが過去に呼び出されたことがあり、かつ、そのメソッドの１回以上の過去の呼出しのうち、正常な処理結果を生じさせた各呼出しにおけるコンテキストであるそのメソッドの呼出し経路の集合である。
【００７７】
正常な呼出し経路としては、以下のいずれかの呼出し経路情報を登録してよい。
＜呼出し経路情報１＞：その時点のメソッドのコールスタック：異常検出精度は劣るが、管理するリストのサイズは比較的小さい。
＜呼出し経路情報２＞：その時点のメソッド呼び出しの履歴：異常検出精度は比較的高いが、管理するリストのサイズは大きくなる。
【００７８】
例えば、メソッド呼び出しが図８（ａ）に示されるように、メソッドＡ，Ｂ，Ｃ，Ｄの順で行われる場合、メソッドＤが呼び出された時点で、呼出し経路は、次のようになる。
呼出し経路情報１の場合：ＡＣＤ
呼出し経路情報２の場合：ＡＢＢ復帰ＣＤ
【００７９】
具体的には、呼出し経路実績リストテーブル６０９に登録される呼出し経路実績リストの例は、呼出し経路情報２を用いた場合には、図８（ｂ）に示されるごとくとなる。呼出し経路が「ＡＣＤ」、「ＡＢＢ復帰ＣＤ」、または「ＡＢＢ復帰ＢＢ復帰ＣＤ」の何れかの場合に、それらのメソッド呼出しが正常であると判断できる。
【００８０】
なお、全てのメソッド呼出しを対象とすると呼出し経路実績リストが膨大になる場合が考えられる。そのような場合には、対象とするメソッドを制限することでリストの肥大化を抑止する機構を設けてよい。例えば、Ｊａｖａの場合は、パッケージ名(ｊａｖａ．ｘｘやｃｏｍ．＊＊＊．ｘｘのクラスのメソッドは対象外とする、或いは、特定のパッケージ名のクラスのメソッドを対象とする)による制限を設けてよい。また、ライブラリ（ｊａｒ：Ｊａｖａ  Ａｒｃｈｉｖｅ）名による制限を設けてよい。さらに、ネイティブライブラリの場合は、モジュール名（ダイナミックリンク名：ｘｘ．ｄｌｌ、シェアードオブジェクト名：ｘｘ．ｓｏなど)などを、対象とするか否かの判断に用いることができる。
【００８１】
また、プログラムの特性によっては、例外発生が必ずしも異常ではない場合もある。呼出し経路実績リストテーブル６０９に対して、呼出し経路毎の実行回数や頻度による情報を追加し、その値(閾値)に応じてログレベルの切り替えを行う方式も採用可能である。
【００８２】
さらに、呼出し経路実績リストテーブル６０９は、第２のコンテキスト集合として、異常な呼出し経路を含むように構成されてもよい。第２のコンテキスト集合は、例えばメソッドが過去に呼び出されたことがあり、かつ、そのメソッドの１回以上の過去の呼出しのうち、異常な処理結果を生じさせた各呼出しにおけるコンテキストであるそのメソッドの呼出し経路の集合である。
【００８３】
図７および図８に例示される構成例を有する値範囲実績テーブル６０８および呼出し経路実績リストテーブル６０９を用いた、図６のＡＰＳ処理部６０１の動作について、図９および図１０のフローチャートを用いて、以下に詳細に説明する。
【００８４】
図９は、図６のログレベル設定部６０５の処理例を示すフローチャートである。この処理例は、図５のホストサーバ５０１を構成する例えば後述する図１５のＣＰＵ１５０１が、外部記憶装置１５０５からメモリ１５０２にログレベル設定処理プログラムを読み出して実行する処理である。
【００８５】
図９のフローチャートの処理は、図６のメソッド呼出し認識部６０４がメソッド呼出しを取得し、図６のＪＶＭ処理部６０２によるメソッドの実行が開始される直前に実行される。
【００８６】
まず、呼び出されたメソッドに引数があり、かつその入力値について、値範囲実績テーブル６０８を使って値範囲の判断ができるか否かが判定される（ステップＳ９０１）。
【００８７】
入力値がプリミティブな型(数値や文字列など)を有し、その範囲を判断することができ、ステップＳ９０１の判定がＹＥＳならば、図７（ａ）または（ｂ）に例示される値範囲実績テーブル６０８が参照されることにより、引数の入力値の範囲は正常な値範囲にあるか否かが判定される（ステップＳ９０２）。
【００８８】
値範囲実績テーブル６０８（図１の蓄積情報１０６に対応）が第１のコンテキスト集合である正常値範囲、正常長さ、または正常キャラクタ（図７参照）を含むように構成される場合、ステップＳ９０２の判定では次のような制御が行われる。メソッドの引数の入力値が正常な値範囲に含まれない場合に、入力値が正常な値範囲に含まれる場合よりも、ログレベル（ログの詳細度）が高くなる方向に制御が行われる。
【００８９】
また、値範囲実績テーブル６０８が第２のコンテキスト集合である異常値範囲または異常キャラクタ（図７参照）を含むように構成される場合、ステップＳ９０２の判定では次のような制御が行われる。メソッドの引数の入力値が異常な範囲に含まれる場合に、入力値が異常な範囲に含まれない場合よりもログレベル（ログの詳細度）が高くなる方向に制御が行われる。
【００９０】
以上の判定がステップＳ９０２で行われ、引数の入力値が正常な値範囲に含まれずステップＳ９０２の判定がＮＯの場合には、ログ出力部６０６に設定されるログレベル６１０が高いレベルに（ログ６１１の詳細度が高くなるように）設定される（ステップＳ９０３）。
【００９１】
引数の入力値が正常な値範囲に含まれステップＳ９０２の判定がＹＥＳの場合には、ログ出力部６０６に設定されるログレベル６１０が低いレベルに（ログ６１１の詳細度が低くなるように）設定される可能性が残される。この場合にはさらに、呼出し経路による判断を行うために、ステップＳ９０４の処理に進む。
【００９２】
また、前述のステップＳ９０１で、引数の入力値が数値や文字列等のプリミティブな型ではない、または文字列であってもその形式が複雑である、または、直接引数として値を渡さないで場合には、値範囲実績テーブル６０８による判断はできない。引数がデータベースを検索するためのＳＱＬ文である場合や、引数が他の変数を参照するポインタ値である場合である。この結果、ステップＳ９０１の判定がＮＯとなった場合には、呼出し経路による判断を行うために、ステップＳ９０４の処理に進む。
【００９３】
ステップＳ９０４では、まず、現在のメソッドの呼出し経路が生成される。ここでは、図８の説明で前述したように、その時点のメソッドのコールスタックの内容または呼び出しの履歴の内容が参照されて呼出し経路が生成される。
【００９４】
次に、図８（ｂ）に例示される呼出し経路実績リストテーブル６０９が参照されることにより、ステップＳ９０４で生成された呼出し経路が正常な呼出し経路に含まれるか否かが判定される（ステップＳ９０５）。
【００９５】
呼出し経路実績リストテーブル６０９（図１の蓄積情報１０６に対応）が第１のコンテキスト集合である正常な呼出し経路を含むように構成される場合、ステップＳ９０５の判定では次のような制御が行われる。ステップＳ９０４で生成された呼出し経路が第１のコンテキスト集合である正常な呼出し経路の集合に含まれない場合に、生成された呼出し経路が正常な呼出し経路の集合に含まれる場合よりも、ログレベル（ログの詳細度）が高くなる方向に制御が行われる。
【００９６】
また、呼出し経路実績リストテーブル６０９が第２のコンテキスト集合である異常な呼出し経路を含むように構成される場合、ステップＳ９０５の判定では次のような制御が行われる。ステップＳ９０４で生成された呼出し経路が第２のコンテキスト集合である異常な呼出し経路の集合に含まれる場合に、生成された呼出し経路が異常な呼出し経路の集合に含まれない場合よりも、ログレベル（ログの詳細度）が高くなる方向に制御が行われる。
【００９７】
以上の判定がステップＳ９０５で行われ、現時点での呼出し経路が正常な呼出し経路に含まれずステップＳ９０５の判定がＮＯの場合には、ログ出力部６０６に設定されるログレベル６１０が高いレベルに（ログ６１１の詳細度が高くなるように）設定される（ステップＳ９０３）。
【００９８】
一方、現時点での呼出し経路が正常な呼出し経路に含まれステップＳ９０５の判定がＹＥＳの場合には、ログ出力部６０６に設定されるログレベル６１０が低いレベルに（ログ６１１の詳細度が低くなるように）設定される（ステップＳ９０６）。
【００９９】
ステップＳ９０３またはＳ９０６のログレベル６１０の設定処理の後、図９のフローチャートの処理が終了して、図６のログレベル設定部６０５の処理が終了する。
【０１００】
以上のようにして、図６のログレベル設定部６０５は、値範囲実績テーブル６０８を用いた引数の入力値の範囲についての判断結果と、呼出し経路実績リストテーブル６０９を用いた呼出し経路の判断結果を組み合わせて、ログレベル６１０を決定できる。すなわち、引数の入力値や呼出し経路等の内部状態を加味した動的なコンテキストに基づいてログレベル６１０が決定される。これにより、異常な入力値または異常な内部状態の発生時にログレベル６１０を引き上げることが可能となり、異常の発生(または予兆)時の詳細ログ出力の精緻性を向上させることが可能となる。
【０１０１】
図１０は、図６の処理結果判定部６０７の処理例を示すフローチャートである。
この処理例は、図５のホストサーバ５０１を構成する例えば後述する図１５のＣＰＵ１５０１が、外部記憶装置１５０５からメモリ１５０２に処理結果判定処理プログラムを読み出して実行する処理である。
【０１０２】
図１０のフローチャートの処理は、図６のＪＶＭ処理部６０２によるアプリケーションプログラム６０３のメソッドの実行が完了し、呼出し元のメソッドに制御が復帰する直前に実行される。
【０１０３】
まず、図６のＪＶＭ処理部６０２において、Ｊａｖａ例外などの異常が発生したか否かが判定される（ステップＳ１００１）。
【０１０４】
異常が発生せずステップＳ１００１の判定がＮＯならば、現在の呼出し経路が正常な呼出し経路となるように、図８（ｂ）に例示される呼出し経路実績リストテーブル６０９の内容が更新される（ステップＳ１００２）。具体的には、現在の呼出し経路が、呼出し経路実績リストテーブル６０９中の第１のコンテキスト集合である正常呼出し経路の集合に追加登録される。また、呼出し経路実績リストテーブル６０９が第２のコンテキスト集合である異常呼出し経路の集合を保持している場合には、現在の呼出し経路が第２のコンテキスト集合である異常呼出し経路の集合から除外されるように、その内容が更新される。
【０１０５】
その後、図６のログレベル設定部６０５による図９のステップＳ９０１で、呼び出されたメソッドに引数があり、かつその入力値について、値範囲実績テーブル６０８を使って値範囲の判断ができると判定されたか否かがチェックされる（ステップＳ１００３）。このチェックは、例えばログレベル設定部６０５による図９のステップＳ９０１の判定処理の結果をホストサーバ５０１を構成する例えば後述する図１５のメモリ１５０２に保持しておき、それを参照することにより行うことができる。
【０１０６】
ステップＳ１００３の判定がＹＥＳならば、現在の引数の入力値が正常な値範囲となるように、図７に例示される値範囲実績テーブル６０８の内容が更新される（ステップＳ１００４）。具体的には、引数の入力値が値範囲実績テーブル６０８中の第１のコンテキスト集合である正常な値範囲に含まれるように、第１のコンテキスト集合の正常な値範囲が拡げて更新される。また、値範囲実績テーブル６０８が第２のコンテキスト集合である異常な値範囲を保持している場合には、引数の入力値の範囲が第２のコンテキスト集合の範囲から除外されるように、第２のコンテキスト集合の異常な値範囲が縮小して更新される。
【０１０７】
一方、異常が発生しステップＳ１００１の判定がＹＥＳならば、現在の呼出し経路が異常な呼出し経路となるように、図８（ｂ）に例示される呼出し経路実績リストテーブル６０９の内容が更新される（ステップＳ１００５）。具体的には、現在の呼出し経路が、呼出し経路実績リストテーブル６０９中の第１のコンテキスト集合である正常呼出し経路の集合から除外されるように、その内容が更新される。また、呼出し経路実績リストテーブル６０９が第２のコンテキスト集合である異常呼出し経路の集合を保持している場合には、現在の呼出し経路が第２のコンテキスト集合である異常呼出し経路の集合に追加登録される。
【０１０８】
その後、ステップＳ１００３と同様のチェックが行われる。図６のログレベル設定部６０５による図９のステップＳ９０１で、呼び出されたメソッドに引数があり、かつその入力値について、値範囲実績テーブル６０８を使って値範囲の判断ができると判定されたか否かがチェックされる（ステップＳ１００６）。
【０１０９】
ステップＳ１００６の判定がＹＥＳならば、現在の引数の入力値が異常な値範囲となるように、図７に例示される値範囲実績テーブル６０８の内容が更新される（ステップＳ１００７）。具体的には、引数の入力値が値範囲実績テーブル６０８中の第１のコンテキスト集合である正常な値範囲から除外されるように、第１のコンテキスト集合の正常な値範囲が縮小して更新される。また、値範囲実績テーブル６０８が第２のコンテキスト集合である異常な値範囲を保持している場合には、引数の入力値の範囲が第２のコンテキスト集合の範囲に含まれるように、第２のコンテキスト集合の異常な値範囲が拡張して更新される。
【０１１０】
ステップＳ１００３またはＳ１００６の判定がＮＯとなった後、およびステップＳ１００４またはＳ１００７の処理の後、図１０のフローチャートの処理が終了して、図６の処理結果判定部６０７の処理が終了する。
【０１１１】
上述の処理において、ステップＳ１００２またはＳ１００５で設定される現在の呼出し経路は、次のようにして取得される。メソッド呼出しの発生時に図６のログレベル設定部６０５が実行する図９のログレベル設定処理において、ステップＳ９０４で現在の呼出し経路の生成処理が実行されていれば、それがメモリ（後述する図１５のメモリ１５０２等）に保持されて参照される。一方、ステップＳ９０４が実行されていなければ、新たにステップＳ９０４と同様の処理が実行されて、現在の呼出し経路が生成され使用される。
【０１１２】
値範囲実績テーブル６０８または呼出し経路実績リストテーブル６０９内の第１または第２のコンテキスト集合が更新される場合、上述したような更新条件が１回満たされたらすぐに更新されるのではなく、所定回数満たされたら更新されるように構成してもよい。
【０１１３】
図１１は、第３の実施形態に係る図５のホストサーバ５０１の処理機能の構成例を示すブロック図である。
【０１１４】
図１１において、第２の実施形態に係る図６の処理機能構成と同じ構成要素には同じ符号を付して示し、その説明を省略する。
【０１１５】
図１１の構成が図６の構成と異なる点は、図５のホストサーバ５０１がネットワーク５０４上に複数存在し、それぞれが図６をベースとする処理機能構成を備え、さらに、各ＡＰＳ処理部６０１がログ制御情報通信部１１０１を備える点である。
【０１１６】
このログ制御情報通信部１１０１は、図１のログ制御情報通信部１０７に対応する。
例えば、＃１のホストサーバ５０１内のＪＶＭ処理部６０２で実行されていたメソッドが＃２のホストサーバ５０１内のアプリケーションプログラム６０３のメソッドを呼び出す場合に、以下の制御が実行される。＃１のホストサーバ５０１内のＡＰＳ処理部６０１のログ制御情報通信部１１０１は、呼出し元のメソッドによる呼出し先のメソッドへの呼出しに含めてログ制御情報を送信する。＃２のホストサーバ５０１内のＡＰＳ処理部６０１のログ制御情報通信部１１０１は、＃１のホストサーバ５０１内のＡＰＳ処理部６０１のログ制御情報通信部１１０１が送信したログ制御情報を受信し、自装置内のログレベル設定部６０５に引き渡す。自装置内のログ出力条件設定部１０３は、そのログ制御情報を用いて呼び出されたメソッドにおけるログレベル６１０を決定し、ログ出力部６０６に設定する。
【０１１７】
図１２は、図１１のログ制御情報通信部１１０１が呼出し元である場合に実行する送信処理例を示すフローチャートである。
【０１１８】
この処理例は、図５のホストサーバ５０１を構成する例えば後述する図１５のＣＰＵ１５０１が、外部記憶装置１５０５からメモリ１５０２にログ制御情報送信プログラムを読み出して実行する処理である。
【０１１９】
図１２のフローチャートの処理は、呼出し元のＪＶＭ処理部６０２が実行するメソッド上で、送信要求として、ソケット通信によるデータ書出しのイベントが発生した場合に起動される。
【０１２０】
まず、ＪＶＭ処理部６０２に問合せが行われることにより、実行中のメソッドのシステムプロパティが取得され、そこにログ制御情報出力指定がされているか否かが判定される（ステップＳ１２０１）。
【０１２１】
ログ制御情報出力指定がされておりステップＳ１２０１の判定がＹＥＳならば、送信要求された送信データの先頭に、ログ制御情報が付加されて、送信処理が実行される（ステップＳ１２０２）。
【０１２２】
ログ制御情報出力指定がされておらずステップＳ１２０１の判定がＮＯならば、送信要求された送信データに対して通常の送信処理が実行される（ステップＳ１２０３）。
【０１２３】
ステップＳ１２０２またはＳ１２０３の送信処理の後、図１２のフローチャートの処理が終了し、図１１のログ制御情報通信部１１０１の送信処理が終了する。
【０１２４】
図１３は、図１１のログ制御情報通信部１１０１が呼出し先である場合に実行する第１の受信処理例を示すフローチャートである。
【０１２５】
この処理例は、図５のホストサーバ５０１を構成する例えば後述する図１５のＣＰＵ１５０１が、外部記憶装置１５０５からメモリ１５０２に第１のログ制御情報受信プログラムを読み出して実行する処理である。
【０１２６】
第１の実施形態に係るログ制御情報通信部１０７の説明で前述したように、ログ制御情報としては、呼出し元であるメソッドにおいて設定されたログレベルと、呼出し元であるメソッドの呼出し経路のいずれを採用することができる。
【０１２７】
図１３は、ログ制御情報として呼出し元であるメソッドにおいて設定されたログレベルが採用される場合の、呼出し先でのログ制御情報の受信処理を示すものである。
【０１２８】
この処理例は、受信イベントが発生した場合に起動される。
まず、受信イベントで特定される受信データの先頭にログ制御情報が付加されているか否かが判定される（ステップＳ１３０１）。
【０１２９】
ログ制御情報が付加されておりステップＳ１３０１の判定がＹＥＳならば、そのログ制御情報がログレベルＸとして受信される（ステップＳ１３０２）。このログレベルＸは、ホストサーバ５０１を構成する例えば後述する図１５のメモリ１５０２に保持される。
【０１３０】
ステップＳ１３０２の処理の後、またはステップＳ１３０１の判定がＮＯとなった後、受信データの受信処理が実行される（ステップＳ１３０３）。
【０１３１】
その後、その受信データに基づいてメソッドの呼出し処理が実行される（ステップＳ１３０４）。この呼出しは、呼出し側、例えば＃２のホストサーバ５０１内のＡＰＳ処理部６０１のメソッド呼出し認識部６０４によって認識される。
【０１３２】
そして、第２の実施形態の説明で前述したようにして、＃２のホストサーバ５０１内のＡＰＳ処理部６０１のログレベル設定部６０５が起動し、ログレベルが決定される。このログレベル設定部６０５が出力するログレベルが、ログレベルＹとして取得される（ステップＳ１３０５）。このログレベルＹは、ホストサーバ５０１を構成する例えば後述する図１５のメモリ１５０２に保持される。
【０１３３】
次に、ステップＳ１３０２が実行されてログレベルＸが保持されたか否かが判定される（ステップＳ１３０６）。
【０１３４】
ログレベルＸが保持されていれば、ステップＳ１３０２で保持された呼出し元から伝播されたログレベルＸと、ステップＳ１３０５で保持された自装置内のログレベル設定部６０５が出力したログレベルＹのうち、高いほうのログレベルが、設定すべきログレベル６１０としてログ出力部６０６に設定される（ステップＳ１３０７）。
【０１３５】
一方、ログレベルＸが保持されていなければ、ステップＳ１３０５で保持された自装置内のログレベル設定部６０５が出力したログレベルＹが、設定すべきログレベル６１０としてログ出力部６０６に設定される（ステップＳ１３０８）。
【０１３６】
ステップＳ１３０７またはＳ１３０８の処理の後、図１３のフローチャートの処理が終了し、図１１のログ制御情報通信部１１０１の受信処理が終了する。
【０１３７】
図１４は、図１１のログ制御情報通信部１１０１が呼出し先である場合に実行する第２の受信処理例を示すフローチャートである。
【０１３８】
この処理例は、図５のホストサーバ５０１を構成する例えば後述する図１５のＣＰＵ１５０１が、外部記憶装置１５０５からメモリ１５０２に第２のログ制御情報受信プログラムを読み出して実行する処理である。
【０１３９】
図１４は、ログ制御情報として呼出し元であるメソッドの呼出し経路が採用される場合の、呼出し先でのログ制御情報の受信処理を示すものである。
【０１４０】
この処理例は、図１３の第１の受信処理例と同様に、受信イベントが発生した場合に起動される。
【０１４１】
まず、受信イベントで特定される受信データの先頭にログ制御情報が付加されているか否かが判定される（ステップＳ１４０１）。
【０１４２】
ログ制御情報が付加されておりステップＳ１４０１の判定がＹＥＳならば、次の制御処理が実行される（ステップＳ１４０２）。メソッド呼出しの発生時に実行される前述した図９のログレベル設定処理のステップＳ９０４で現在の呼出し経路の生成処理が実行されるときに、生成された現在の呼出し経路の先頭に、ログ制御情報である呼出し元経路情報を付加するように指示が行われる。具体的には例えば、呼出し元経路情報とともに所定の指示情報がメモリ（例えば後述する図１５のメモリ１５０２）に設定され、図９のステップＳ９０４の実行時にその内容が参照される。
【０１４３】
その後、受信データの受信処理が実行される（ステップＳ１４０３）、さらに、その受信データに基づいてメソッドの呼出し処理が実行される（ステップＳ１４０４）。この呼出しは、呼出し側、例えば＃２のホストサーバ５０１内のＡＰＳ処理部６０１のメソッド呼出し認識部６０４によって認識される。
【０１４４】
ステップＳ１４０４の処理の後、図１４のフローチャートの処理が終了し、図１１のログ制御情報通信部１１０１の受信処理が終了する。
【０１４５】
以上の受信処理により、図９のログレベル設定処理のステップＳ９０４で現在の呼出し経路の生成処理が実行されるときに、生成された現在の呼出し経路の先頭に、呼出し元の経路が付加されることになる。そして、図９のステップＳ９０５で、呼出し元の経路も含めて呼出し経路が判断される。これにより、プログラム（プロセス、マシン、メソッド）を跨いで異常の発生（または予兆）を伝播させることができ、情報処理システム全体として異常の発生（または予兆）をとらえて、詳細ログ出力の精緻性を向上させることが可能となる。
【０１４６】
ここで、呼出し元のメソッドと呼出し先のメソッドが同一のホストサーバ５０１上にある場合には、そのホストサーバ５０１内のＡＰＳ処理部６０１のログ制御情報通信部１１０１が、図１２の送信処理と図１３または図１４の受信処理を実行することになる。ソケット通信であれば、通信がソケットにカプセル化されるため、ログ制御情報通信部１１０１は、呼出し元のホストサーバ５０１が自装置と同一であるか否かは、特に意識する必要はない。
【０１４７】
図１５は、第１の実施形態に係る情報処理装置１００のハードウェア構成例を示す図である。
【０１４８】
図１５に示される情報処理装置１００は、ＣＰＵ（中央演算処理装置）１５０１、メモリ１５０２、入力装置１５０３、出力装置１５０４、外部記憶装置１５０５、可搬記録媒体１５０９が挿入される可搬記録媒体駆動装置１５０６、及び通信インタフェース１５０７を有し、これらがバス１５０８によって相互に接続された構成を有する。同図に示される構成は上記情報処理装置１００を実現できるコンピュータの一例であり、そのようなコンピュータはこの構成に限定されるものではない。
【０１４９】
ＣＰＵ１５０１は、情報処理装置１００の全体の制御を行うプロセッサである。メモリ１５０２は、プログラムの実行、データ更新等の際に、外部記憶装置１５０５（或いは可搬記録媒体１５０９）に記憶されているプログラム又はデータを一時的に格納するＲＡＭ等のメモリである。ＣＵＰ１５０１は、プログラムを外部記憶装置１５０５からメモリ１５０２に読み出して実行することにより、全体の制御を行う。
【０１５０】
入力装置１５０３は、ユーザによるキーボードやマウス等による入力操作を検出し、その検出結果をＣＰＵ１５０１に通知する。
【０１５１】
出力装置１５０４は、ＣＰＵ１５０１の制御によって送られてくるデータをディスプレイ装置等の表示装置や印刷装置に出力する。
【０１５２】
外部記憶装置１５０５は、例えばハードディスク記憶装置である。主に各種データやプログラムの保存に用いられる。
【０１５３】
可搬記録媒体駆動装置１５０６は、光ディスクや、ＳＤメモリカード、コンパクトフラッシュメモリカード等の可搬記録媒体１５０９を収容する。光ディスクには、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）やＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）等がある。可搬記録媒体１５０９を収容した可搬記録媒体駆動装置１５０６は、外部記憶装置１５０５の補助の役割を有する。
【０１５４】
通信インタフェース１５０７は、例えばＬＡＮ（ローカルエリアネットワーク）又はＷＡＮ（ワイドエリアネットワーク）の通信回線を接続するための装置である。
【０１５５】
本実施形態による情報処理装置１００は、以下に説明する機能を搭載したプログラムをＣＰＵ１５０１が実行することで実現される。そのプログラムは、例えば外部記憶装置１５０５や可搬記録媒体１５０９に記録して配布してもよく、或いはネットワーク接続装置１５０７によりネットワークから取得できるようにしてもよい。
【０１５６】
以上説明した実施形態、特に第２，第３の実施形態は、アプリケーションプログラム６０３がＪＶＭ処理部６０２で実行されるＪａｖａプログラムであることを例に説明したが、図１の処理機能構成を有する第１の実施形態に示されるように、ログ取得対象は、Ｊａｖａプログラムのメソッドやプロセス、スレッドなどに限定される必要はなく、一般的なプログラム等に適用することが可能である。
【０１５７】
以上の各実施形態に関して、更に以下の付記を開示する。
（付記１）
コンピュータに、
ログ取得対象の呼び出しの際に、前記呼び出しのコンテキストを取得し、
前記ログ取得対象に対する呼び出しのコンテキストと処理結果とを対応づけた情報を蓄積した蓄積情報、および、取得した前記コンテキストに基づき、当該ログ取得対象におけるログの出力条件を設定する、
ことを含む処理を実行させることを特徴とするログ出力条件設定プログラム。
（付記２）
前記呼び出しのコンテキストと処理結果を対応づけた情報を前記蓄積情報に蓄積する、
ことを含む処理を前記コンピュータに実行させることを特徴とする付記１に記載のログ出力条件設定プログラム。
（付記３）
前記コンテキストは、前記ログ取得対象が呼び出されるときの入力値と、前記ログ取得対象の呼出し経路を含み、
前記ログ取得対象に対する呼び出しの入力値と処理結果とを対応づけた情報を蓄積した入力値蓄積情報、および、取得した前記入力値に基づいて、または、前記ログ取得対象に対する呼出し経路と処理結果とを対応づけた情報を蓄積した呼出し経路蓄積情報、および、取得した前記呼出し経路に基づいて、前記ログの出力条件を設定する、
ことを含む処理を前記コンピュータに実行させることを特徴とする付記１または２のいずれかに記載のログ出力条件設定プログラム。
（付記４）
前記蓄積情報は、前記ログ取得対象が過去に呼び出されたことがあり、かつ、前記ログ取得対象の１回以上の過去の呼出しのうち、正常な処理結果を生じさせた各呼出しにおけるコンテキストに基づいて定まる第１のコンテキスト集合を含み、
前記ログ取得対象が呼び出されるコンテキストが前記第１のコンテキスト集合に含まれない場合に、前記ログ取得対象が呼び出されるコンテキストが前記第１のコンテキスト集合に含まれる場合よりも前記ログの詳細度が高くなるように、前記ログの出力条件を設定する、
ことを含む処理を前記コンピュータに実行させることを特徴とする付記１ないし３のいずれかに記載のログ出力条件設定プログラム。
（付記５）
前記呼び出されたログ取得対象の処理結果が正常であった場合に、前記認識したコンテキストが前記第１のコンテキスト集合に含まれるように当該第１のコンテキスト集合を更新する、
ことを含む処理を実行させることを特徴とする付記４に記載のログ出力条件設定プログラム。
（付記６）
前記呼び出されたログ取得対象の処理結果が異常であった場合に、前記認識したコンテキストが前記第１のコンテキスト集合から除外されるように当該第１のコンテキスト集合を更新する、
ことを含む処理を実行させることを特徴とする付記４または５のいずれかに記載のログ出力条件設定プログラム。
（付記７）
前記蓄積情報は、前記ログ取得対象が過去に呼び出されたことがあり、かつ、前記ログ取得対象の１回以上の過去の呼出しのうち、異常な処理結果を生じさせた各呼出しにおけるコンテキストに基づいて定まる第２のコンテキスト集合を含み、
前記ログ取得対象が呼び出されるコンテキストが前記第２のコンテキスト集合に含まれる場合に、前記ログ取得対象が呼び出されるコンテキストが前記第２のコンテキスト集合に含まれない場合よりも前記ログの詳細度が高くなるように、前記ログの出力条件を設定する、
ことを含む処理を前記コンピュータに実行させることを特徴とする付記１ないし６のいずれかに記載のログ出力条件設定プログラム。
（付記８）
前記呼び出されたログ取得対象の処理結果が異常であった場合に、前記認識したコンテキストが前記第２のコンテキスト集合に含まれるように当該第２のコンテキスト集合を更新する、
ことを含む処理を実行させることを特徴とする付記７に記載のログ出力条件設定プログラム。
（付記９）
前記呼び出されたログ取得対象の処理結果が正常であった場合に、前記認識したコンテキストが前記第２のコンテキスト集合から除外されるように当該第２のコンテキスト集合を更新する、
ことを含む処理を実行させることを特徴とする付記７または８のいずれかに記載のログ出力条件設定プログラム。
（付記１０）
前記ログ取得対象が前記コンピュータまたは他のコンピュータ上で実行される他のプログラムから呼び出されるときに、前記他のプログラムから前記ログ取得対象への呼出しに含めてログ制御情報を伝播し、当該ログ制御情報を用いて前記ログ取得対象における前記ログの出力条件を設定する、
ことを含む処理を実行させることを特徴とする付記１ないし９のいずれかに記載のログ出力条件設定プログラム。
（付記１１）
前記ログ制御情報は、前記他のプログラムにおいて設定されたログの出力条件であり、
当該ログ取得対象に対応して設定したログの出力条件と、前記他のプログラムから伝播された前記他のプログラムのログの出力条件とを比較して、当該ログ取得対象における最終的なログの出力条件を設定する、
ことを含む処理を実行させることを特徴とする付記１１に記載のログ出力条件設定プログラム。
（付記１２）
前記ログ制御情報は、前記他のプログラムの呼出し経路を含み、
前記ログ取得対象が呼び出される際に、前記他のプログラムの呼出し経路を当該ログ取得対象の呼出し経路の先頭に付加して、当該ログ取得対象の新たな呼出し経路とし、
前記新たな呼出し経路を前記ログ取得対象の呼出し経路と処理結果とを対応づけた呼出し経路蓄積情報を参照して判断することにより、前記ログの出力条件を設定する、
ことを含む処理を前記コンピュータに実行させることを特徴とする付記１１に記載のログ出力条件設定プログラム。
（付記１３）
前記コンテキストは、前記ログ取得対象が呼び出されるときに前記ログ取得対象に対して引数として与えられる入力値または前記ログ取得対象の呼出し経路のうち少なくとも１つを含む、
ことを特著とする付記１ないし１２のいずれかに記載のログ出力条件設定プログラム。
（付記１４）
前記ログ取得対象は、前記コンピュータで実行されるプログラムであるプロセス、スレッド、アプリケーションプログラム、プログラムモジュール、関数プログラム、プロシージャ、またはオブジェクト指向言語で記述されるクラスにおいて定義されるメソッドのうちのいずれかである、
ことを特徴とする付記１ないし１３のいずれかに記載のログ出力条件設定プログラム。
（付記１５）
ログ取得対象の呼び出しの際に、前記呼び出しのコンテキストを取得するコンテキスト取得部と、
前記ログ取得対象に対する呼び出しのコンテキストと処理結果とを対応づけた情報を蓄積した蓄積情報、および、取得した前記コンテキストに基づき、当該ログ取得対象におけるログの出力条件を設定するログ出力条件設定部と、
を備えることを特徴とするログ出力条件設定装置。
（付記１６）
ログ取得対象の呼び出しの際に、前記呼び出しのコンテキストを取得し、
前記ログ取得対象に対する呼び出しのコンテキストと処理結果とを対応づけた情報を蓄積した蓄積情報、および、取得した前記コンテキストに基づき、当該ログ取得対象におけるログの出力条件を設定する、
ことを特徴とするログ出力条件設定方法。
【符号の説明】
【０１５８】
１０１  ログ取得対象処理部
１０２  コンテキスト取得部
１０３  ログ出力条件設定部
１０４、６０６  ログ出力部
１０５、６０７  処理結果判定部
１０６  蓄積情報
１０７  ログ制御情報通信部
１０８  ログ出力条件
１０９  ログ
１１０  ログファイル
５０１  ホストサーバ
５０２  クライアント
５０３  管理端末
５０４  ネットワーク
６０１  ＡＰＳ（ＡＰｐｌｉｃａｔｉｏｎ  Ｓｅｒｖｅｒ）処理部
６０２  ＪＶＭ（Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）処理部
６０３  アプリケーションプログラム
６０４  メソッド呼出し認識部
６０５  ログレベル設定部
６０８  値範囲実績テーブル
６０９  呼出し経路実績リストテーブル
６１０  ログレベル
６１１  ログ
６１２  ログファイル
１１０１  ログ制御情報通信部
１４０２  通信路
１５０１  ＣＰＵ（中央演算処理装置）
１５０２  メモリ
１５０３  入力装置
１５０４  出力装置
１５０５  外部記憶装置
１５０６  可搬記録媒体駆動装置
１５０７  通信インタフェース
１５０８  バス
１５０９  可搬記録媒体
【図１】
2015075964.tif 000003
【図２】
2015075964.tif 000004
【図３】
2015075964.tif 000005
【図４】
2015075964.tif 000006
【図５】
2015075964.tif 000007
【図６】
2015075964.tif 000008
【図８】
2015075964.tif 000009
【図９】
2015075964.tif 000010
【図１０】
2015075964.tif 000011
【図１１】
2015075964.tif 000012
【図１２】
2015075964.tif 000013
【図１３】
2015075964.tif 000014
【図１４】
2015075964.tif 000015
【図１５】
2015075964.tif 000016
【図７】
2015075964.tif 000017