(57)【要約】【課題】小さなデータ量で障害発生時のログを出力できる可能性を高くする。【解決手段】情報処理装置１０は、複数のプログラムモジュールを含むプログラムを実行する。ログレベル設定部１１は、複数のプログラムモジュールの１つが呼び出されたとき、そのプログラムモジュールの過去の実行回数に基づいて、ログに含める情報の詳細度を設定する。例えば、ログレベル設定部１１は、呼び出されたプログラムモジュールの実行回数または実行頻度が所定のしきい値より低い場合、出力されるログの詳細度を高くする。ログ出力部１２は、設定された詳細度に応じた情報を含むログを出力する。【選択図】図１
2014049056.tif 000002
【特許請求の範囲】
【請求項１】
複数のプログラムモジュールを含むプログラムを実行する情報処理装置において、
前記複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールの過去の実行回数に基づいて、ログに含める情報の詳細度を設定する設定部と、
設定された前記詳細度に応じた情報を含むログを出力するログ出力部と、
を有することを特徴とする情報処理装置。
【請求項２】
前記複数のプログラムモジュールのうち、呼び出し元のプログラムモジュールと呼び出し先のプログラムモジュールとの組み合わせごとに、実行された回数または実行頻度を計数する計数部をさらに有し、
前記設定部は、前記複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールとその呼び出し元のプログラムモジュールとの組み合わせについての実行回数または実行頻度を所定のしきい値と比較し、実行回数または実行頻度が前記しきい値より低い場合には、出力されるログの前記詳細度を高くする、
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記設定部は、呼び出し元のプログラムモジュールと呼び出し先のプログラムモジュールのすべての組み合わせのうち、実行回数または実行頻度が前記しきい値以上である組み合わせの割合が所定値より低い場合には、出力されるログの前記詳細度を一定値以下に抑制することを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記設定部は、前記複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールの実行回数または実行頻度が所定のしきい値より低い場合には、出力されるログの前記詳細度を高くすることを特徴とする請求項１記載の情報処理装置。
【請求項５】
前記設定部は、前記複数のプログラムモジュールのうち、実行回数または実行頻度が前記しきい値以上であるプログラムモジュールの割合が所定値より低い場合には、出力されるログの前記詳細度を一定値以下に抑制することを特徴とする請求項４記載の情報処理装置。
【請求項６】
前記複数のプログラムモジュールのそれぞれについて、実行回数に基づいてネイティブコードにコンパイルするかを決定し、コンパイルすると決定したプログラムモジュールをネイティブコードにコンパイルしてから実行する仮想マシン処理部をさらに有し、
前記設定部は、前記複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールがネイティブコードにコンパイルされたかを判定し、呼び出されたプログラムモジュールがネイティブコードにコンパイルされていない場合には、出力されるログの前記詳細度を高くする、
ことを特徴とする請求項１記載の情報処理装置。
【請求項７】
複数のプログラムモジュールを含むプログラムを実行する情報処理装置におけるログ出力方法であって、
前記複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールの過去の実行回数に基づいて、ログに含める情報の詳細度を設定し、
設定された前記詳細度に応じた情報を含むログを出力する、
ことを特徴とするログ出力方法。
【請求項８】
コンピュータに、
前記コンピュータが実行する所定のプログラムに含まれる複数のプログラムモジュールのうちの１つが呼び出されたとき、呼び出されたプログラムモジュールの過去の実行回数に基づいて、ログに含める情報の詳細度を設定し、
設定された前記詳細度に応じた情報を含むログを出力する、
処理を実行させることを特徴とするログ出力プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、ログ出力方法およびログ出力プログラムに関する。
【背景技術】
【０００２】
コンピュータなどの情報処理装置は、処理の実行状況を示すログを出力する機能を備える。出力されたログは、例えば、情報処理装置に障害が発生した場合に、その障害の発生原因の究明やプログラムの修正のために使用される。
【０００３】
また、出力するログのデータ量を抑制するために、必要なログのみを出力する方法が考えられている。例えば、プログラム内に事前に設定されたチェックポイントのログのみを出力する方法がある。
【０００４】
また、ログレベルを変更することで出力するログのデータ量を可変する情報処理装置もある。例えば、異常発生時に自動的にログレベルを切り替えるようにした情報処理装置がある。あるいは、プロセスの実行時にその複製プロセスを生成しておき、複製元のプロセスが異常終了すると、ログレベルを上げて複製プロセスを実行するようにした情報処理装置もある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−２０５４８８号公報
【特許文献２】特開２０１２−１８５１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
プログラム内のどの箇所が実行されたときに障害が発生するかを完全に予測することはできない。このため、事前に設定されたチェックポイントのログのみを出力する上記の方法では、実際に障害が発生したときにログを出力できないことがあるという問題がある。
【０００７】
１つの側面では、本発明は、小さなデータ量で障害発生時のログを出力できる可能性を高めた情報処理装置、ログ出力方法およびログ出力プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
１つの案では、複数のプログラムモジュールを含むプログラムを実行する情報処理装置が提供される。この情報処理装置は、設定部とログ出力部とを有する。設定部は、複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールの過去の実行回数に基づいて、ログに含める情報の詳細度を設定する。ログ出力部は、設定された詳細度に応じた情報を含むログを出力する。
【０００９】
また、１つの案では、上記の情報処理装置の処理を実行するログ出力方法、および、上記の情報処理装置の処理をコンピュータに実行させるログ出力プログラムが提供される。
【発明の効果】
【００１０】
１態様によれば、情報処理装置、ログ出力方法およびログ出力プログラムにおいて、小さなデータ量で障害発生時のログを出力できる可能性が高くなる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態に係る情報処理装置の構成例および動作例を示す図である。
【図２】第２の実施の形態に係る情報処理装置のハードウェア構成例を示す図である。
【図３】情報処理装置の処理機能の構成例を示すブロック図である。
【図４】監視対象プログラムのソースコードの例を示す図である。
【図５】ツリー構造の例を示す図である。
【図６】実行状況管理テーブルに登録される情報の例を示す図である。
【図７】ログレベル設定部の処理例を示すフローチャートである。
【図８】ログ出力部の処理例を示すフローチャートである。
【図９】第３の実施の形態に係る情報処理システムのシステム構成例を示す図である。
【図１０】ホストサーバの処理機能の構成例を示すブロック図である。
【図１１】ログレベル設定部による問い合わせ処理例を示すフローチャートである。
【図１２】実行状況管理テーブルに登録される情報の例を示す図である。
【図１３】ログレベル設定処理例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本発明の実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る情報処理装置の構成例および動作例を示す図である。図１に示す情報処理装置１０は、所定のプログラムを実行するプロセッサ（図示せず）を備える。また、情報処理装置１０は、プログラムの実行に伴い、そのプログラムが正常に実行されたかなどのプログラム実行状況を記述したログを出力する機能を備える。
【００１３】
情報処理装置１０は、ログレベル設定部１１およびログ出力部１２を備える。ログレベル設定部１１およびログ出力部１２は、複数のプログラムモジュールを含むあるプログラム（以下、プログラムＰ１とする）が情報処理装置１０で実行されているときのログ出力を制御するための処理を実行する。複数のプログラムモジュールのそれぞれは、例えば少なくとも１つの関数を含む。また、各プログラムモジュールは、他のプログラムモジュールの実行に応じて呼び出されて実行される。
【００１４】
なお、ログレベル設定部１１およびログ出力部１２の処理は、上記のプログラムＰ１とは別のログ出力プログラムを情報処理装置１０のプロセッサが実行することで実現される。
【００１５】
ログレベル設定部１１は、プログラムＰ１に含まれる複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールの過去の実行回数に基づいてログレベルを設定する。ログレベルとは、例えば、出力するログに含める情報の詳細度を決定するためのパラメータであり、情報の詳細度が高いほど、出力されるログのデータ量が増加する。なお、ログレベルは、ログを出力するか否かを決定するためのパラメータであってもよい。
【００１６】
ログ出力部１２は、ログレベル設定部１１によって設定されたログレベルのログ（例えば、ログレベルが示す詳細度に応じた情報を含むログ）を出力する。図１では例として、ログ出力部１２はログファイル２０を生成し、ログファイル２０の中に、設定されたログレベルのログを書き込んでいく。ログファイル２０は、例えば、情報処理装置１０が備える不揮発性記憶装置に格納される。
【００１７】
このような情報処理装置１０によれば、ログレベルの可変機能を備えることで、必要に応じて出力するログのデータ量を小さくすることができるので、ログファイル２０のデータ量を抑制することができる。これとともに、呼び出されたプログラムモジュールの実行回数に応じてログレベルが設定されることで、障害発生時において詳細度の高いログを出力できる可能性を高くすることができる。
【００１８】
例えば、ログレベルを変更する方法としては、プログラムＰ１に含まれるプログラムモジュールごとに、実行時に出力するログレベルをあらかじめ決めておく方法がある。しかし、プログラムＰ１に含まれるプログラムモジュールのうち、どのプログラムモジュールが実行されたときに障害が発生しやすいかを事前に予想することは難しい。このため、この方法では、実際に障害が発生したときに詳細度の高いログを出力できない可能性がある。
【００１９】
これに対して、情報処理装置１０は、プログラムモジュールの実行回数という実際の実行状況に応じて、ログレベルを変更する。この処理によれば、情報処理装置１０は、障害発生の解析結果に基づいて、実際に障害が発生しやすい実行状況になったときにログの詳細度を高くすることができる。
【００２０】
例えば、実行回数や実行頻度が高いプログラムモジュールよりも、実行回数や実行頻度が低いプログラムモジュールの方が、実行時に障害が発生しやすい。このため、情報処理装置１０は、呼び出されたプログラムモジュールの実行回数に応じてログレベルを設定することで、ログファイル２０のデータ量を抑制しつつ、必要な時点で詳細なログを出力できる可能性を高くすることができる。
【００２１】
以下、プログラムＰ１の実行時におけるログレベル設定部１１およびログ出力部１２の処理例を示す。この処理例では、情報処理装置１０は、上記のプログラムＰ１に含まれるプログラムモジュールごとに、プログラムＰ１の実行が開始されてからの実行回数を計数する機能を備えるものとする。そして、計数された実行回数は図１に示す実行回数テーブル１３に登録され、この実行回数テーブル１３に登録された実行回数をログレベル設定部１１が参照するものとする。
【００２２】
実行回数テーブル１３には、プログラムモジュールを識別するためのモジュールＩＤと、実行回数とが対応付けられている。なお、実行回数テーブル１３には、プログラムＰ１の実行開始からの単なる実行回数ではなく、例えば、所定時間ごとの実行回数（すなわち実行頻度）がプログラムモジュールごとに登録されてもよい。
【００２３】
まず、プログラムＰ１に含まれるあるプログラムモジュール（図示せず）の実行により、プログラムモジュールＭ１が呼び出されたとする。このとき、ログレベル設定部１１は、実行回数テーブル１３を参照して、プログラムモジュールＭ１についての過去の実行回数を判別し、その実行回数を所定のしきい値と比較する。
【００２４】
ここでは、実行回数がしきい値以上であったものとすると、ログレベル設定部１１は、ログレベルＢを設定する。ログ出力部１２は、ログレベルＢに応じたログ２１をログファイル２０に書き込む。なお、ログレベルＢは、後述するログレベルＡと比較して詳細度の低いログを出力するためのパラメータである。
【００２５】
次に、プログラムモジュールＭ１の実行により、プログラムモジュールＭ２が呼び出されたものとする。このとき、ログレベル設定部１１は、実行回数テーブル１３を参照して、プログラムモジュールＭ２についての過去の実行回数を判別し、その実行回数を前述のしきい値と比較する。
【００２６】
ここでは、実行回数がしきい値より低かったものとすると、ログレベル設定部１１は、前述のログレベルＢよりログの詳細度を高くするためのログレベルＡを設定する。ログ出力部１２は、ログレベルＡに応じたログ２２をログファイル２０に書き込む。ログ２２には、例えば、ログ２１よりも多数の項目が記述される。
【００２７】
以上の処理により、情報処理装置１０は、プログラムモジュールの実行状況に応じて、障害が発生しやすいと考えられる場合に、出力するログの詳細度を高くする。従って、情報処理装置１０は、ログファイル２０のデータ量を抑制しながらも、障害が発生したときに詳細なログを出力できる可能性を高くすることができる。
【００２８】
〔第２の実施の形態〕
図２は、第２の実施の形態に係る情報処理装置のハードウェア構成例を示す図である。情報処理装置１００は、例えば、図２に示すようなコンピュータとして実現される。
【００２９】
情報処理装置１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介して、ＲＡＭ（Random Access Memory）１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。またプロセッサ１０１は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【００３０】
ＲＡＭ１０２は、情報処理装置１００の主記憶装置として使用される。ＲＡＭ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。
【００３１】
バス１０９に接続されている周辺機器としては、ＨＤＤ（Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７および通信インタフェース１０８がある。
【００３２】
ＨＤＤ１０３は、情報処理装置１００の補助記憶装置として使用される。ＨＤＤ１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、ＳＳＤ（Solid State Drive）などの他の種類の不揮発性記憶装置を使用することもできる。
【００３３】
グラフィック処理装置１０４には、モニタ１０４ａが接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ１０４ａの画面に表示させる。モニタ１０４ａとしては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００３４】
入力インタフェース１０５には、例えば、キーボード１０５ａとマウス１０５ｂとが接続されている。入力インタフェース１０５は、キーボード１０５ａやマウス１０５ｂから出力される信号をプロセッサ１０１に送信する。なお、マウス１０５ｂは、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３５】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク１０６ａに記録されたデータの読み取りを行う。光ディスク１０６ａは、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク１０６ａには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc−Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００３６】
機器接続インタフェース１０７は、情報処理装置１００に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置１０７ａやメモリリーダライタ１０７ｂを接続することができる。メモリ装置１０７ａは、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ１０７ｂは、メモリカード１０７ｃへのデータの書き込み、またはメモリカード１０７ｃからのデータの読み出しを行う装置である。メモリカード１０７ｃは、カード型の記録媒体である。
【００３７】
通信インタフェース１０８は、ネットワーク１０８ａなどを介して他の装置との間でデータの送受信を行う。
以上のようなハードウェア構成によって、情報処理装置１００の処理機能を実現することができる。なお、図１に示した情報処理装置１０も、図２に示したハードウェアを有するコンピュータとして実現することができる。
【００３８】
図３は、情報処理装置の処理機能の構成例を示すブロック図である。情報処理装置１００は、アプリケーション処理部１１０、ログレベル設定部１２１およびログ出力部１２２を備える。また、情報処理装置１００の記憶装置には、ノード情報１３１、実行状況管理テーブル１３２、制御モード１３３、ログレベル１３４およびログファイル１４０が記録される。
【００３９】
アプリケーション処理部１１０は、ログレベル設定部１２１およびログ出力部１２２による実行監視対象とされる所定のアプリケーションプログラム（以下、監視対象プログラムと呼ぶ）が、情報処理装置１００のプロセッサ１０１によって実行されることによって起動する。そして、アプリケーション処理部１１０の処理は、監視対象プログラムがプロセッサ１０１によって実行されることで実現される。
【００４０】
一方、ログレベル設定部１２１およびログ出力部１２２の処理は、監視対象プログラムの実行を監視するとともにログを出力するための実行監視プログラムが、情報処理装置１００のプロセッサ１０１によって実行されることで実現される。
【００４１】
ログレベル設定部１２１は、アプリケーション処理部１１０の実行状況を監視し、その実行状況に応じて、出力するログの詳細度を示すログレベル１３４を設定する。ログレベル１３４は、例えば、情報処理装置１００のＲＡＭ１０２に記録される。
【００４２】
ノード情報１３１には、監視対象プログラムを静的解析して得られたツリー構造を示す情報が、あらかじめ登録されている。ログレベル設定部１２１は、ノード情報１３１に基づき、ツリー構造に含まれるノードを単位として、アプリケーション処理部１１０の実行状況を監視する。
【００４３】
具体的には、ログレベル設定部１２１は、呼び出し元ノードと呼び出し先ノードとの組み合わせである「処理ルート」ごとに実行回数を計数し、実行回数を示す情報を実行状況管理テーブル１３２に登録する。ログレベル設定部１２１は、実行状況管理テーブル１３２に基づき、実行された処理ルートについての実行回数が所定のしきい値より低いとき、ログレベル１３４を高くする。
【００４４】
制御モード１３３は、ログレベル１３４を設定するための動作モードを示し、ログレベル設定部１２１によって設定される。本実施の形態では、制御モード１３３は、ログレベル１３４を自動的に変更するレベル自動変更モードのオン／オフを示す。レベル自動変更モードがオフの状態では、ログレベル１３４は所定のレベルに固定化される。ログレベル設定部１２１は、アプリケーション処理部１１０の実行が開始された直後の期間では、レベル自動変更モードをオフにする。
【００４５】
ログ出力部１２２は、設定されたログレベル１３４に応じたログを、ログファイル１４０に書き込む。ログファイル１４０は、ログ出力部１２２によって作成されて、例えば、情報処理装置１００のＨＤＤ１０３、あるいは情報処理装置１００の外部の記憶装置に格納される。
【００４６】
図４は、監視対象プログラムのソースコードの例を示す図である。また、図５は、ツリー構造の例を示す図である。
図４に示す監視対象プログラムは、静的解析によって、図５に示すような１０個のノードＮ１〜Ｎ１０を有するツリー構造で表すことができる。ここで、図４に示すように、ノードＮ１〜Ｎ１０のそれぞれは、少なくとも１つの関数を含むプログラムモジュールである。そして、ルートノードであるノードＮ１以外のノードＮ２〜Ｎ１０は、それぞれ他のノードの実行によって呼び出されて実行される。
【００４７】
図３に示したノード情報１３１には、監視対象プログラムと、ツリー構造に含まれる各ノードとの対応を示す情報が登録される。例えば、ノード情報１３１には、監視対象プログラムのソースコードにおける、各ノードの先頭の行番号が登録される。このようなノード情報１３１により、ログレベル設定部１２１は、監視対象プログラムの実行中においてどのノードがどのノードから呼び出されたかを判別することができる。
【００４８】
また、図５において下線を付して示す数字は、呼び出し元ノードと呼び出し先ノードとの組み合わせ（処理ルート）の実行回数を示す。例えば図５において、ノードＮ１からノードＮ２への処理ルートの実行回数（すなわち、ノードＮ１の実行によってノードＮ２が呼び出された回数）は「３」である。ここで言う実行回数とは、監視対象プログラムの実行が開始されてから現在までに処理ルートが実行された回数である。このような処理ルートごとの実行回数は、ログレベル設定部１２１によって計数される。
【００４９】
図６は、実行状況管理テーブルに登録される情報の例を示す図である。実行状況管理テーブル１３２には、ログレベル設定部１２１によって計数された処理ルートごとの実行回数が登録される。図６において、横方向に対応付けられたレコードが１つの処理ルートに対応する情報を示す。そして、実行状況管理テーブル１３２には、監視対象プログラムに基づくツリー構造に含まれるすべての処理ルートに対応するレコードが設けられる。
【００５０】
図６において、「呼び出し元ノード」の欄には、呼び出し元のノードの識別番号が登録され、「呼び出し先ノード」の欄には、呼び出し先のノードの識別番号が登録される。「実行回数」の欄には、対応する処理ルートの実行回数の計数値が、ログレベル設定部１２１によって登録される。
【００５１】
「ステータス」の欄には、対応する実行回数の値が所定のしきい値以上であるか否かを示すフラグ情報が、ログレベル設定部１２１によって登録される。本実施の形態では、ステータスの初期値を「Ｆａｌｓｅ」とし、実行回数がしきい値以上である場合のステータスを「Ｔｒｕｅ」、実行回数がしきい値より低い場合のステータスを「Ｆａｌｓｅ」とする。
【００５２】
なお、実行状況管理テーブル１３２には、処理ルートごとに対応付けられる情報として、実行回数の代わりに実行頻度（直近の単位時間における実行回数）が登録されてもよい。この場合、実行頻度が所定のしきい値以上である場合にステータスは「Ｔｒｕｅ」とされ、実行頻度がしきい値より低い場合にステータスは「Ｆａｌｓｅ」とされる。
【００５３】
ところで、プログラムが実行されているとき、頻繁に実行される処理ルートよりも、通常はあまり実行されない処理ルートが実行されたときの方が、障害が発生する可能性が高い。また、通常はあまり実行されない処理ルートの実行時に発生した障害は、テストによって再現することが困難であることが多いため、このような障害の発生原因を究明する際の難易度が高い。
【００５４】
このような観点から、ログレベル設定部１２１は、処理ルートごとの実行回数の計数結果に基づき、実行回数または実行頻度がしきい値より低い処理ルートが実行されたときに、ログレベルを高くする。これにより、ログファイル１４０のデータサイズを削減することを可能にしつつ、障害発生時に詳細なログを記録できる確率を高くすることができる。また、原因究明の難易度の高い障害の発生時において、詳細なログを記録できるようになり、原因究明の作業効率を高くすることができる。
【００５５】
図７は、ログレベル設定部の処理例を示すフローチャートである。この図７の処理は、例えば、監視対象プログラムの実行が開始されてアプリケーション処理部１１０が起動したときに実行される。
【００５６】
なお、この図７では例として、ログレベル１３４を高レベルと低レベルの２段階に設定可能であるものとする。例えば、ｌｏｇ４ｊ（Apache Software Foundationの商標）で規定されたログレベルのうち、“debug”レベル（高レベル）と“information”レベル（低レベル）のいずれかに設定可能とする。
【００５７】
［ステップＳ１１］ログレベル設定部１２１は、レベル自動変更モードをオフにして初期化する。
［ステップＳ１２］ログレベル設定部１２１は、監視対象プログラムの実行を監視し、あるノードから次のノードが呼び出されたかを判定する。次のノードが呼び出された場合にはステップＳ１４の処理が実行され、次のノードが呼び出されていない場合にはステップＳ１３の処理が実行される。
【００５８】
［ステップＳ１３］ログレベル設定部１２１は、監視対象プログラムの実行が終了したかを判定する。実行が終了した場合、ログレベル設定部１２１（およびログ出力部１２２）の処理が終了する。一方、実行が終了していない場合、ステップＳ１２の処理が実行される。
【００５９】
［ステップＳ１４］ログレベル設定部１２１は、実行状況管理テーブル１３２において、該当処理ルート（すなわち、ステップＳ１２における呼び出し元ノードおよび呼び出し先ノードに対応する処理ルート）に対応付けられた実行回数を「１」だけインクリメントする。また、ログレベル設定部１２１は、インクリメント後の実行回数を所定のしきい値と比較し、その比較結果に応じて、実行回数に対応付けられたステータスを必要に応じて更新する。ログレベル設定部１２１は、実行回数がしきい値以上である場合にはステータスを「Ｆａｌｓｅ」にし、実行回数がしきい値より小さい場合にはステータスを「Ｔｒｕｅ」にする。
【００６０】
［ステップＳ１５］ログレベル設定部１２１は、現在、レベル自動変更モードがオンであるかを判定する。レベル自動変更モードがオンである場合、ステップＳ１６の処理が実行され、オフである場合、ステップＳ１９の処理が実行される。
【００６１】
［ステップＳ１６］ログレベル設定部１２１は、実行状況管理テーブル１３２において、該当処理ルートに対応付けられたステータスが「Ｔｒｕｅ」か「Ｆａｌｓｅ」かを判定する。ステータスが「Ｔｒｕｅ」の場合、ステップＳ１８の処理が実行され、ステータスが「Ｆａｌｓｅ」の場合、ステップＳ１７の処理が実行される。
【００６２】
［ステップＳ１７］ログレベル設定部１２１は、ログレベル１３４を高レベルに設定する。この後、ステップＳ１２の処理が実行される。
［ステップＳ１８］ログレベル設定部１２１は、ログレベル１３４を低レベルに設定する。この後、ステップＳ１２の処理が実行される。
【００６３】
なお、ログレベル１３４を３段階以上に設定可能とする場合には、例えば、ステップＳ１８で設定されるログレベル１３４より、ステップＳ１７で設定されるログレベル１３４が高くされる（すなわち、ログのデータ量が大きくなるように設定される）ようにすればよい。例えば、ログレベル１３４が高いほど出力されるログの詳細度が上がるものとした場合、ステップＳ１７では、所定段階以上のログレベル１３４が設定され、ステップＳ１８では、所定段階より低いログレベル１３４が設定される。
【００６４】
［ステップＳ１９］ログレベル設定部１２１は、実行状況管理テーブル１３２に登録された処理ルートのうち、ステータスが「Ｔｒｕｅ」である処理ルートが所定割合以上であるかを判定する。所定割合以上である場合、ステップＳ２０の処理が実行され、所定割合未満である場合、ステップＳ１８の処理が実行される。
【００６５】
［ステップＳ２０］ログレベル設定部１２１は、レベル自動変更モードをオフからオンに更新する。
上記の図７の処理によれば、ログレベル設定部１２１は、あるノードから次のノードが呼び出されたとき、該当処理ルートの実行回数がしきい値以上であれば、ログレベル１３４を低レベルにして、出力されるログのデータ量を抑制する（ステップＳ１８）。一方、ログレベル設定部１２１は、該当処理ルートの実行回数がしきい値より小さい場合には、ログレベル１３４を高レベルにする（ステップＳ１７）。これにより、障害が発生しやすい処理ルートの実行時において出力されるログの詳細度が高くなり、障害発生時に詳細なログを記録できる可能性を高くすることができる。
【００６６】
ただし、ログレベル設定部１２１は、アプリケーション処理部１１０の処理が開始された初期期間においては、実行状況管理テーブル１３２に登録された実行回数から、各処理ルートが頻繁に実行されるものか否かを正確に判定できない。初期期間においては、各処理ルートの実行回数の値は全体として小さくなり、また、実行回数がしきい値以上になる処理ルートが現れたとしても、その数は少数になる。このため、初期期間において実行回数を基にログレベルが決定される場合には、実行された処理ルートが本当に頻繁に実行されるものか否かに関係なく、大量のログが出力される可能性がある。
【００６７】
そこで、ログレベル設定部１２１は、ステータスが「Ｔｒｕｅ」である処理ルートが所定割合未満である場合には（ステップＳ１９：Ｎｏ）、レベル自動変更モードをオフのままにして、ログレベル１３４の設定を低レベルに固定する（ステップＳ１８）。このような処理により、初期期間においてむやみに大量のログが出力される事態を回避できる。
【００６８】
なお、前述のように、実行状況管理テーブル１３２には、実行回数の代わりに実行頻度が登録されてもよい。この場合、図７の処理は、ステップＳ１４において実行回数の代わりに実行頻度が更新されるように変形される。
【００６９】
図８は、ログ出力部の処理例を示すフローチャートである。この図８の処理は、図７と同様に、例えば、監視対象プログラムの実行が開始されてアプリケーション処理部１１０が起動したときに実行される。
【００７０】
［ステップＳ３１］ログ出力部１２２は、監視対象プログラムの実行が開始されると、ログファイル１４０を作成して、情報処理装置１００のＨＤＤ１０３に格納する。これ以後、ログ出力部１２２は、監視対象プログラムの実行を監視する。
【００７１】
［ステップＳ３２］ログ出力部１２２は、ログレベル設定部１２１によって設定されたログレベル１３４を、ＲＡＭ１０２から読み込む。
［ステップＳ３３］ログ出力部１２２は、読み込んだログレベル１３４に応じたログを、ログファイル１４０に書き込む。ログには、例えば、日時、ログレベル、監視対象プログラムの実行に伴って計算されたデータの値、処理が正常に実行されたか否かを示す情報などが含まれる。そして、同じ処理に関するログを比較した場合、ログレベル１３４が高いほど出力されるログのデータ量が大きくなる。例えば、ログレベル１３４が高いほど、ログに含まれる項目の数が多くなる。
【００７２】
ステップＳ３２，Ｓ３３の処理は、例えば、ノードが実行されるたびに行われるなど、所定のタイミングで繰り返し実行される。
〔第３の実施の形態〕
第３の実施の形態では、図１に示した情報処理装置１０を、仮想マシンを実現するホストサーバとして実現した場合の例を示す。図９は、第３の実施の形態に係る情報処理システムのシステム構成例を示す図である。
【００７３】
情報処理システム２００は、ホストサーバ２０１と、複数のクライアント２０２と、管理端末２０３とを含む。ホストサーバ２０１と各クライアント２０２、および、ホストサーバ２０１と管理端末２０３とは、ネットワーク２０４によって相互に接続されている。なお、ホストサーバ２０１、各クライアント２０２および管理端末２０３は、いずれも図２に示したようなハードウェア構成を有するコンピュータとして実現可能である。
【００７４】
ホストサーバ２０１は、Ｊａｖａ（Oracle Corporationの登録商標）仮想マシンを構築し、Ｊａｖａ仮想マシン上で各種のアプリケーションプログラムを実行することで、各クライアント２０２に対して各種のサービスを提供する。
【００７５】
クライアント２０２は、ホストサーバ２０１が提供するサービスを受けるユーザによって操作される端末装置であり、ユーザの操作に応じてホストサーバ２０１にアクセスする。
【００７６】
管理端末２０３は、ホストサーバ２０１の管理者によって操作される端末装置である。管理端末２０３は、例えば、管理者からの操作に応じてホストサーバ２０１にアクセスし、ホストサーバ２０１に記録されたログファイルを読み出して、表示装置（図示せず）に表示する。管理者は、表示されたログファイルの内容を基に、ホストサーバ２０１において発生した障害に対処することができる。
【００７７】
図１０は、ホストサーバの処理機能の構成例を示すブロック図である。なお、図１０では、図３に対応する構成要素には同じ符号を付して示し、その説明を省略する。
ホストサーバ２０１は、ＡＰＳ（Application Server）処理部２２０およびＪＶＭ（Java Virtual Machine）処理部２３０を備える。また、ホストサーバ２０１の記憶装置には、アプリケーションプログラム２１０、ノード情報１３１ａ、実行状況管理テーブル１３２ａ、制御モード１３３、ログレベル１３４およびログファイル１４０が記録される。
【００７８】
アプリケーションプログラム２１０は、第２の実施の形態における監視対象プログラムに対応するものである。アプリケーションプログラム２１０は、Ｊａｖａ仮想マシン上で実行される。
【００７９】
ＪＶＭ処理部２３０の処理は、ホストサーバ２０１のプロセッサ（図示せず）がＪＶＭプログラムを実行することで実現される。ＪＶＭ処理部２３０は、Ｊａｖａ仮想マシンとしての処理を実行する。ＪＶＭ処理部２３０は、ＡＰＳ処理部２２０を介してアプリケーションプログラム２１０のソースコードを取得して実行し、アプリケーションプログラム２１０に従ったＪａｖａ仮想マシンとしての処理を行う。
【００８０】
ＡＰＳ処理部２２０の処理は、ホストサーバ２０１のプロセッサがＡＰＳプログラムを実行することで実現される。ＡＰＳ処理部２２０は、Ｊａｖａ仮想マシン上でのアプリケーションプログラム２１０の実行状況を監視し、ログを出力する。ＡＰＳ処理部２２０は、ログレベル設定部１２１ａおよびログ出力部１２２を有している。
【００８１】
ログレベル設定部１２１ａは、図３におけるログレベル設定部１２１と同様に、アプリケーションプログラム２１０を静的解析して得られるツリー構造のノードを単位として、アプリケーションプログラム２１０の実行を監視する。また、ノード情報１３１ａには、アプリケーションプログラム２１０と、ツリー構造に含まれる各ノードとの対応を示す情報が登録される。ここで、本実施の形態におけるノードはＪａｖａメソッドであり、ログレベル設定部１２１ａは、ノード情報１３１ａに基づき、Ｊａｖａメソッドを単位としてアプリケーションプログラム２１０の実行を監視する。Ｊａｖａメソッドは、アプリケーションプログラム２１０に含まれるプログラムモジュールである。
【００８２】
ログレベル設定部１２１ａは、監視対象であるアプリケーションプログラム２１０の実行状況に応じて、出力するログの詳細度を示すログレベル１３４を出力する。ただし、ログレベル設定部１２１ａは、図３におけるログレベル設定部１２１とは異なり、ＪＶＭ処理部２３０が備えるＪａｖａメソッドの実行管理機能を利用して、アプリケーションプログラム２１０の実行状況を判別してログレベル１３４を設定する。
【００８３】
ＪＶＭ処理部２３０は、アプリケーションプログラム２１０を実行する際に、次のような２つの方式を用いる。１つは、アプリケーションプログラム２１０を変換して得られる中間コード（バイトコード）を逐次解釈して実行するインタープリタ方式である。もう１つは、中間コードを所定範囲ごとにネイティブコードにコンパイルしてから実行するＪＩＴ（Just In Time）コンパイル方式である。
【００８４】
ＪＶＭ処理部２３０は、このようなＪＩＴコンパイル方式でアプリケーションプログラム２１０を実行するＪＩＴコンパイル部２３１を備える。本実施の形態において、ＪＩＴコンパイル部２３１は、中間コードをＪａｖａメソッドごとにネイティブコードに変換する。
【００８５】
ＪＶＭ処理部２３０は、基本的にはインタープリタ方式でアプリケーションプログラム２１０を実行する。その一方で、ＪＩＴコンパイル部２３１は、Ｊａｖａメソッドごとに実行回数を計数することなどにより、各Ｊａｖａメソッドの実行状況を監視する。ＪＩＴコンパイル部２３１は、実行状況の解析結果に基づいて、ネイティブコード２３２に変換すべきＪａｖａメソッドを判別する。基本的に、繰り返し実行される数が多いＪａｖａメソッドほど、ＪＩＴコンパイル方式を用いる方が実行速度が高くなる。このため、ＪＩＴコンパイル部２３１は、例えば、実行回数または実行頻度がしきい値以上になったＪａｖａメソッドを、ネイティブコード２３２に変換すべきＪａｖａメソッドと判定する。
【００８６】
そして、ＪＩＴコンパイル部２３１は、ネイティブコード２３２に変換すべきと判定されたＪａｖａメソッドが呼び出されたとき、そのＪａｖａメソッドをネイティブコード２３２に変換して実行する。また、ＪＩＴコンパイル部２３１は、変換したネイティブコード２３２をホストサーバ２０１の記憶装置（例えばＲＡＭ）に格納しておき、それ以後、ネイティブコード２３２に変換済みのＪａｖａメソッドが呼び出された場合には、変換済みのネイティブコード２３２を実行する。なお、ＪＩＴコンパイル部２３１は、ネイティブコード２３２に変換すべきと判定されたＪａｖａメソッドを、そのＪａｖａメソッドが次に呼び出される前にネイティブコード２３２に変換してＲＡＭに格納しておいてもよい。
【００８７】
ログレベル設定部１２１ａは、各Ｊａｖａメソッドがネイティブコード２３２に変換されたかを問い合わせ、その問い合わせの結果を実行状況管理テーブル１３２ａに登録する。そして、ログレベル設定部１２１ａは、Ｊａｖａメソッドが呼び出されたとき、呼び出されたＪａｖａメソッドがネイティブコード２３２に変換されていない場合に、そのＪａｖａメソッドは頻繁に実行されていないと判定して、ログレベル１３４を高くする。
【００８８】
ログ出力部１２２は、図３のログ出力部１２２と同様に、設定されたログレベル１３４に応じたログを、ログファイル１４０に書き込む。
図１１は、ログレベル設定部による問い合わせ処理例を示すフローチャートである。ログレベル設定部１２１ａは、図１１の処理を、例えば一定時間ごとに繰り返し実行する。
【００８９】
［ステップＳ４１］ログレベル設定部１２１ａは、ＪＩＴコンパイル部２３１に対して、Ｊａｖａメソッドごとのネイティブコード２３２への変換状況を問い合わせる。例えば、Oracle CorporationのＪＶＭプログラムである“Java HotSpot Server VM”では、“PrintCompilation”コマンドを用いて、ネイティブコード２３２へのコンパイル要求が発生したＪａｖａメソッドの識別名を取得することができる。
【００９０】
［ステップＳ４２］ログレベル設定部１２１ａは、ＪＩＴコンパイル部２３１から、ネイティブコード２３２に変換されたＪａｖａメソッドの識別名を取得する。
［ステップＳ４３］ログレベル設定部１２１ａは、実行状況管理テーブル１３２ａに対して、ネイティブコード２３２に変換されたか否かを示す情報をＪａｖａメソッドごとに登録して、実行状況管理テーブル１３２ａを更新する。
【００９１】
図１２は、実行状況管理テーブルに登録される情報の例を示す図である。実行状況管理テーブル１３２ａには、アプリケーションプログラム２１０のツリー構造に含まれるノードごとにステータスが登録される。各ノードはＪａｖａメソッドに対応している。ステータスは、対応するノードがネイティブコード２３２に変換されたか否かを示す。本実施の形態では、ステータスの初期値を「Ｆａｌｓｅ」とし、ネイティブコード２３２に変換された場合のステータスを「Ｔｒｕｅ」、変換されていない場合のステータスを「Ｆａｌｓｅ」とする。
【００９２】
図１３は、ログレベル設定処理例を示すフローチャートである。この図１３の処理は、例えば、アプリケーションプログラム２１０の実行が開始されたときに実行される。なお、この図１３では図７と同様に、ログレベル１３４を高レベルと低レベルの２段階に設定可能であるものとする。
【００９３】
［ステップＳ５１］ログレベル設定部１２１ａは、レベル自動変更モードをオフにして初期化する。
［ステップＳ５２］ログレベル設定部１２１ａは、アプリケーションプログラム２１０の実行を監視し、あるノードから次のノードが呼び出されたかを判定する。ここで言うノードとはＪａｖａメソッドに対応する。次のノードが呼び出された場合にはステップＳ５４の処理が実行され、次のノードが呼び出されていない場合にはステップＳ５３の処理が実行される。
【００９４】
［ステップＳ５３］ログレベル設定部１２１ａは、アプリケーションプログラム２１０の実行が終了したかを判定する。実行が終了した場合、ログレベル設定部１２１ａ（およびログ出力部１２２）の処理が終了する。一方、実行が終了していない場合、ステップＳ５２の処理が実行される。
【００９５】
［ステップＳ５４］ログレベル設定部１２１ａは、現在、レベル自動変更モードがオンであるかを判定する。レベル自動変更モードがオンである場合、ステップＳ５５の処理が実行され、オフである場合、ステップＳ５８の処理が実行される。
【００９６】
［ステップＳ５５］ログレベル設定部１２１ａは、実行状況管理テーブル１３２ａにおいて、該当ノード（すなわち、ステップＳ５２において呼び出されたノード）に対応付けられたステータスが「Ｔｒｕｅ」か「Ｆａｌｓｅ」かを判定する。ステータスが「Ｔｒｕｅ」の場合、ステップＳ５７の処理が実行され、ステータスが「Ｆａｌｓｅ」の場合、ステップＳ５６の処理が実行される。
【００９７】
［ステップＳ５６］ログレベル設定部１２１ａは、ログレベル１３４を高レベルに設定する。この後、ステップＳ５２の処理が実行される。
［ステップＳ５７］ログレベル設定部１２１ａは、ログレベル１３４を低レベルに設定する。この後、ステップＳ５２の処理が実行される。
【００９８】
［ステップＳ５８］ログレベル設定部１２１ａは、実行状況管理テーブル１３２ａに登録されたノードのうち、ステータスが「Ｔｒｕｅ」であるノードが所定割合以上であるかを判定する。所定割合以上である場合、ステップＳ５９の処理が実行され、所定割合未満である場合、ステップＳ５７の処理が実行される。
【００９９】
［ステップＳ５９］ログレベル設定部１２１ａは、レベル自動変更モードをオフからオンに更新する。
上記の図１３によれば、ログレベル設定部１２１ａは、ノードが呼び出されたとき、そのノードがネイティブコード２３２に変換されている場合には、ログレベル１３４を低レベルにして、出力されるログのデータ量を抑制する（ステップＳ５７）。一方、ログレベル設定部１２１ａは、呼び出されたノードがネイティブコード２３２に変換されていない場合には、そのノードは頻繁に実行されてはいないと判定して、ログレベル１３４を高レベルにする（ステップＳ５６）。これにより、障害が発生しやすい処理ルートの実行時において出力されるログの詳細度が高くなり、障害発生時に詳細なログを記録できる可能性を高くすることができる。
【０１００】
また、ログレベル設定部１２１ａは、アプリケーションプログラム２１０の実行が開始された初期期間においては、ノードがネイティブコード２３２に変換されたか否かという情報から、各処理ルートが頻繁に実行されるものか否かを正確に判定できない。そこで、ログレベル設定部１２１ａは、ステータスが「Ｔｒｕｅ」であるノードが所定割合未満である場合には（ステップＳ５８：Ｎｏ）、レベル自動変更モードをオフのままにして、ログレベル１３４の設定を低レベルに固定する（ステップＳ５７）。これにより、初期期間においてむやみに大量のログが出力される事態を回避できる。
【０１０１】
なお、上記の図１１〜図１３の処理では、ログレベル設定部１２１ａは、Ｊａｖａメソッドがネイティブコード２３２に変換されたかを、そのＪａｖａメソッドが呼び出される前に実行状況管理テーブル１３２ａに登録した。しかし、他の方法として、ログレベル設定部１２１ａは、Ｊａｖａメソッドが呼び出されたときにＪＩＴコンパイル部２３１に問い合わせを行い、その応答結果から、呼び出されたＪａｖａメソッドがネイティブコード２３２に変換されたかを判定してもよい。
【０１０２】
以上の第３の実施の形態では、ログレベル設定部１２１ａは、ＪＩＴコンパイル部２３１が備えている機能を利用して、ノードが頻繁に実行されているかを判定し、その判定結果からログレベル１３４を設定する。このため、ＡＰＳ処理部２２０の処理を単純化して、その処理負荷を軽減することができ、また、ＡＰＳ処理部２２０の処理を実現するためのプログラムのデータ容量を削減することができる。
【０１０３】
なお、上記の各実施の形態に示した装置（例えば、情報処理装置１０，１００およびホストサーバ２０１）の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／ＲＷなどがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１０４】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１０５】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１０６】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  複数のプログラムモジュールを含むプログラムを実行する情報処理装置において、
前記複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールの過去の実行回数に基づいて、ログに含める情報の詳細度を設定する設定部と、
設定された前記詳細度に応じた情報を含むログを出力するログ出力部と、
を有することを特徴とする情報処理装置。
【０１０７】
（付記２）  前記複数のプログラムモジュールのうち、呼び出し元のプログラムモジュールと呼び出し先のプログラムモジュールとの組み合わせごとに、実行された回数または実行頻度を計数する計数部をさらに有し、
前記設定部は、前記複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールとその呼び出し元のプログラムモジュールとの組み合わせについての実行回数または実行頻度を所定のしきい値と比較し、実行回数または実行頻度が前記しきい値より低い場合には、出力されるログの前記詳細度を高くする、
ことを特徴とする付記１記載の情報処理装置。
【０１０８】
（付記３）  前記設定部は、呼び出し元のプログラムモジュールと呼び出し先のプログラムモジュールのすべての組み合わせのうち、実行回数または実行頻度が前記しきい値以上である組み合わせの割合が所定値より低い場合には、出力されるログの前記詳細度を一定値以下に抑制することを特徴とする付記２記載の情報処理装置。
【０１０９】
（付記４）  前記設定部は、前記複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールの実行回数または実行頻度が所定のしきい値より低い場合には、出力されるログの前記詳細度を高くすることを特徴とする付記１記載の情報処理装置。
【０１１０】
（付記５）  前記設定部は、前記複数のプログラムモジュールのうち、実行回数または実行頻度が前記しきい値以上であるプログラムモジュールの割合が所定値より低い場合には、出力されるログの前記詳細度を一定値以下に抑制することを特徴とする付記４記載の情報処理装置。
【０１１１】
（付記６）  前記複数のプログラムモジュールのそれぞれについて、実行回数に基づいてネイティブコードにコンパイルするかを決定し、コンパイルすると決定したプログラムモジュールをネイティブコードにコンパイルしてから実行する仮想マシン処理部をさらに有し、
前記設定部は、前記複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールがネイティブコードにコンパイルされたかを判定し、呼び出されたプログラムモジュールがネイティブコードにコンパイルされていない場合には、出力されるログの前記詳細度を高くする、
ことを特徴とする付記１記載の情報処理装置。
【０１１２】
（付記７）  複数のプログラムモジュールを含むプログラムを実行する情報処理装置におけるログ出力方法であって、
前記複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールの過去の実行回数に基づいて、ログに含める情報の詳細度を設定し、
設定された前記詳細度に応じた情報を含むログを出力する、
ことを特徴とするログ出力方法。
【０１１３】
（付記８）  前記複数のプログラムモジュールのうち、呼び出し元のプログラムモジュールと呼び出し先のプログラムモジュールとの組み合わせごとに、実行された回数または実行頻度を計数する処理をさらに含み、
前記詳細度の設定では、前記複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールとその呼び出し元のプログラムモジュールとの組み合わせについての実行回数または実行頻度を所定のしきい値と比較し、実行回数または実行頻度が前記しきい値より低い場合には、出力されるログの前記詳細度を高くする、
ことを特徴とする付記７記載のログ出力方法。
【０１１４】
（付記９）  前記詳細度の設定では、呼び出し元のプログラムモジュールと呼び出し先のプログラムモジュールのすべての組み合わせのうち、実行回数または実行頻度が前記しきい値以上である組み合わせの割合が所定値より低い場合には、出力されるログの前記詳細度を一定値以下に抑制することを特徴とする付記８記載のログ出力方法。
【０１１５】
（付記１０）  前記詳細度の設定では、前記複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールの実行回数または実行頻度が所定のしきい値より低い場合には、出力されるログの前記詳細度を高くすることを特徴とする付記７記載のログ出力方法。
【０１１６】
（付記１１）  前記詳細度の設定では、前記複数のプログラムモジュールのうち、実行回数または実行頻度が前記しきい値以上であるプログラムモジュールの割合が所定値より低い場合には、出力されるログの前記詳細度を一定値以下に抑制することを特徴とする付記１０記載のログ出力方法。
【０１１７】
（付記１２）  前記複数のプログラムモジュールのそれぞれについて、実行回数に基づいてネイティブコードにコンパイルするかを決定し、コンパイルすると決定したプログラムモジュールをネイティブコードにコンパイルしてから実行する処理をさらに含み、
前記詳細度の設定では、前記複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールがネイティブコードにコンパイルされたかを判定し、呼び出されたプログラムモジュールがネイティブコードにコンパイルされていない場合には、出力されるログの前記詳細度を高くする、
ことを特徴とする付記７記載のログ出力方法。
【０１１８】
（付記１３）  コンピュータに、
前記コンピュータが実行する所定のプログラムに含まれる複数のプログラムモジュールのうちの１つが呼び出されたとき、呼び出されたプログラムモジュールの過去の実行回数に基づいて、ログに含める情報の詳細度を設定し、
設定された前記詳細度に応じた情報を含むログを出力する、
処理を実行させることを特徴とするログ出力プログラム。
【０１１９】
（付記１４）  前記コンピュータに、前記複数のプログラムモジュールのうち、呼び出し元のプログラムモジュールと呼び出し先のプログラムモジュールとの組み合わせごとに、実行された回数または実行頻度を計数する処理をさらに実行させ、
前記詳細度の設定では、前記複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールとその呼び出し元のプログラムモジュールとの組み合わせについての実行回数または実行頻度を所定のしきい値と比較し、実行回数または実行頻度が前記しきい値より低い場合には、出力されるログの前記詳細度を高くする、
ことを特徴とする付記１３記載のログ出力プログラム。
【０１２０】
（付記１５）  前記詳細度の設定では、呼び出し元のプログラムモジュールと呼び出し先のプログラムモジュールのすべての組み合わせのうち、実行回数または実行頻度が前記しきい値以上である組み合わせの割合が所定値より低い場合には、出力されるログの前記詳細度を一定値以下に抑制することを特徴とする付記１４記載のログ出力プログラム。
【０１２１】
（付記１６）  前記詳細度の設定では、前記複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールの実行回数または実行頻度が所定のしきい値より低い場合には、出力されるログの前記詳細度を高くすることを特徴とする付記１３記載のログ出力プログラム。
【０１２２】
（付記１７）  前記詳細度の設定では、前記複数のプログラムモジュールのうち、実行回数または実行頻度が前記しきい値以上であるプログラムモジュールの割合が所定値より低い場合には、出力されるログの前記詳細度を一定値以下に抑制することを特徴とする付記１６記載のログ出力プログラム。
【０１２３】
（付記１８）  前記コンピュータは、前記複数のプログラムモジュールのそれぞれについて、実行回数に基づいてネイティブコードにコンパイルするかを決定し、コンパイルすると決定したプログラムモジュールをネイティブコードにコンパイルしてから実行し、
前記詳細度の設定では、前記複数のプログラムモジュールの１つが呼び出されたとき、呼び出されたプログラムモジュールがネイティブコードにコンパイルされたかを判定し、呼び出されたプログラムモジュールがネイティブコードにコンパイルされていない場合には、出力されるログの前記詳細度を高くする、
ことを特徴とする付記１３記載のログ出力プログラム。
【符号の説明】
【０１２４】
１０  情報処理装置
１１  ログレベル設定部
１２  ログ出力部
１３  実行回数テーブル
２０  ログファイル
２１，２２  ログ
Ｍ１，Ｍ２  プログラムモジュール
【図１】
2014049056.tif 000003
【図２】
2014049056.tif 000004
【図３】
2014049056.tif 000005
【図４】
2014049056.tif 000006
【図５】
2014049056.tif 000007
【図６】
2014049056.tif 000008
【図７】
2014049056.tif 000009
【図８】
2014049056.tif 000010
【図９】
2014049056.tif 000011
【図１０】
2014049056.tif 000012
【図１１】
2014049056.tif 000013
【図１２】
2014049056.tif 000014
【図１３】
2014049056.tif 000015