(57)【要約】【課題】ラップアラウンドの頻度を少なくするログ出力方法を提供する。【解決手段】ログ出力プログラム１０１はアプリケーションプログラムプロセス１００１、１００２からログ情報を受け取り、アプリケーションプログラムプロセス１００１、１００２の起動時に決められたログレベル以下の内容のみを通常出力ログファイル１０２に書き込む。また、障害発生時に詳細な情報が残るようにすべてのログ情報を障害発生時用ログバッファ１０１４に記録し、障害が発生したプロセスのログ情報のみ障害発生時ログファイル１０３に出力する。【選択図】　図１
2004139483.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションプログラムの実行により生成されたログ情報を出力する方法であって、
前記アプリケーションプログラムの実行により生成されたログ情報を記憶装置に記憶し、指定されたレベルに従ってログ情報を出力し、アプリケーションプログラムから受け取ったログ情報から障害時のログ情報であると判断した場合に、前記記憶装置に保持されたログ情報から障害が発生したアプリケーションプログラムの該当プロセスのログ情報を出力することを特徴とするログ情報の出力方法。
【請求項２】
請求項１に記載のログ情報の出力方法において、
アプリケーションプログラムの負荷を監視しておき、そのＣＰＵ使用率の状態と内部バッファのサイズを管理するテーブルを有し、そのテーブルに基づきある一定基準より負荷が小さい場合はログ領域を減少させ、負荷が大きい場合はログ領域を増加させることを特徴とするログ情報の出力方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、指定されたログレベルでログを出力するアプリケーションにおいて、通常のログレベルに加え、内部で詳細なログ情報を持たせるログ出力方法に関する。
【０００２】
【従来の技術】
アプリケーションプログラムは実行履歴を残すためにログ機能を備えている。このログ出力にはアプリケーションプログラムにより出力形態は異なるが、業務運用時にログの出力レベル・ログサイズを予め決め、必要な情報のみ出力するような場合もある。例えば、障害発生時のみ出力、他のアプリケーションプログラムとのインタフェース情報、内部関数レベルでの引数の情報などとレベルを別ける。
【０００３】
障害発生時のみ出力を低レベルとし、その低レベルでのログ出力が指定された場合、必要な情報のみを出力するので、ログサイズを少なく抑えることが可能となる。
【０００４】
また、内部関数レベルでの引数の情報を高レベルとし、高レベルでのログ出力が指定された場合は、出力されるログ情報が多くなり、ログサイズ分に達すると、以前の情報から上書きしていく、ラップアラウンド方式となっている。
【０００５】
また、アプリケーションプログラムで１つのログファイルとなっており、その１つのログファイルに複数のプロセスがログ情報をシーケンシャルに書き込んでいる。
【０００６】
これに関連するものとしてログ情報にレベルを設定することが特許文献１等に開示されている。
【特許文献１】特開２００２−２０７６１２
【発明が解決しようとする課題】
ところで、上記従来技術によれば、ログレベル・ログサイズを予め決めておくことはできるが、障害発生時のログの解析のことは記載されておらず、低レベルで実行された場合には、障害が発生するとその時の障害情報（例えばエラー番号、障害が発生したモジュール名など）しかなく、どんな操作を行ったために障害が発生したのか、システムがどういう状態だったのかと言った解析を行うことができない。また、逆に高レベルで出力した場合は、出力される情報が多くなり、ログファイルがすぐに一杯となりラップアラウンドされ、以前の情報が上書きされログ情報が欠落することで原因究明が困難となる。
【０００７】
また、複数のプロセスのログ情報が１つのファイルに混在しており、障害が発生したプロセスのログ情報のみを取得することが困難である。
【０００８】
本発明の目的は、上述の従来型における問題点に鑑み、障害発生時の原因究明を容易に行うためのログ出力方法を提供することである。また、詳細なログ出力においてはラップアラウンドの原因となるため、アプリケーションプログラムの稼動負荷によりログの出力サイズを動的に変更するログ出力方法を提供する。
【０００９】
【課題を解決するための手段】
上記目的を達成するために、請求項１に係る発明は、出力するログのレベルを指定できるアプリケーションプログラムにおいて、通常は指定されたログレベルで出力する方法と、内部情報としてログレベルに関係なく詳細なログ情報も保持しておくための内部バッファを有し、アプリケーションプログラムから受け取ったログ情報から障害時のログ情報であるかを判断し、障害時のログ情報であった場合には、保持している内部情報から障害が発生したアプリケーションプログラムの該当プロセスのログ情報を障害発生時用ログファイルとして出力する手段を備えたことを特徴とする。
請求項２に係る発明は、アプリケーションプログラムの負荷を監視しておき、そのＣＰＵ使用率の状態と内部バッファのサイズを管理するテーブルを有し、そのテーブルに基づきある一定基準より負荷が軽い場合は障害発生時の内部ログ領域は減少させ、負荷が重い場合は障害発生時の内部ログ領域は増加させる手段を備えたこと特徴とする。
【００１０】
【発明の実施の形態】
以下、図面を用いて本発明の実施の形態を説明する。
【００１１】
図１に本発明を適用したログ出力システムの全体構成を示す。図４にバッファサイズ管理テーブルを示す。
【００１２】
アプリケーションプログラムプロセス１００１、１００２はログレベル、ログに書き込むメッセージ、メッセージＩＤを付加したログ情報およびプロセスＩＤを、ログ出力プログラム１０１に渡す。ログ出力プログラム１０１は、通常ログ出力処理部１０１１、全ログ出力処理部１０１２、プロセス監視処理部１０１３を有する。
【００１３】
通常ログ出力処理部１０１１は、アプリケーションプログラムプロセス１００１、１００２が起動時に指定したログレベル以下のログ情報のみをテキスト形式の通常出力ログファイル１０２に出力する処理である。通常出力ログファイル１０２は常にファイル出力されている。
【００１４】
全ログ出力処理部１０１２は、障害発生時に障害が発生したプロセスのログ情報を出力するために、アプリケーションプログラムプロセス１００１、１００２から受け取ったログ情報をログレベルに関係なく、障害発生時用ログバッファ１０１４としてすべてのログ情報を内部で保持する処理である。障害発生時には、障害発生時用ログバッファ１０１４の内容から、障害が発生したプロセスのログ情報のみを抽出し、障害発生時ログファイル１０３としてファイルに出力することにより、障害が発生したプロセスのすべてのログ情報が残され、解析を容易に行うことができる。尚、ここで障害の発生とはアプリケーション又はアプリケーションのプロセスによるＣＰＵ占有率や、メモリ占有率を監視し、一定時間以上占有している場合、あるいは特定のログ情報を監視し、このログの情報が所定の値を超えたり、時間的な変化が大きい場合などである。
【００１５】
プロセス監視処理部１０１３は、内部で保持するログのバッファサイズを動的に変更するためにアプリケーションプログラムプロセス１００１、１００２の負荷を監視する。アプリケーションプログラムプロセス１００１、１００２に負荷がかかると言う事は、同時に複数のプロセスが実行されていると言う事でもあるため、ログ情報が膨大となり、障害発生時用ログバッファもすぐにラップアラウンドしてしまう。ラップアラウンドすると、障害発生時に過去の情報が上書きされてしまい、必要な情報が欠落してしまうと実際のログ調査時に困難となる。ラップアラウンドを少なくするために、プロセス監視処理部１０１３は、定期的にアプリケーションプログラムプロセス１００１、１００２の状態を監視し、アプリケーションプログラムプロセス１００１、１００２のＣＰＵ使用率に応じて、その時の使用率がいくつであるかをバッファサイズ管理テーブル４００の「プロセスの状況」に記憶する。プロセスが複数実行されている場合は、一番高い値を記憶しておく。ある時点のアプリケーションプログラムプロセス１００１のＣＰＵ使用率が２５％、アプリケーションプログラムプロセス１００２のＣＰＵ使用率が４０％であれば、「５０％未満」の個所が「１」になり、次回監視した時にそれぞれ３０％、５５％になっていれば、「５０％以上７５％未満」の個所が「１」となる。
【００１６】
処理手順を図２および図３を用いて説明する。
【００１７】
ステップ２００で通常ログ出力処理部１０１１はアプリケーションプログラムプロセス１００１、１００２からログレベル、メッセージＩＤ、メッセージおよびプロセスＩＤを受け取る。受け取ったログの情報がアプリケーションプログラムプロセス１００１、１００２が起動時に指定されたログレベル以下の情報であれば（ステップ２０１：Ｙ）、ステップ２０２で通常ログ出力処理部１０１１が通常出力ログファイル１０２にログの情報を出力する。
【００１８】
ステップ２０３で全ログ出力処理部１０１２はバッファサイズ管理テーブル４００を参照し、「プロセスの状況」と「現在のサイズ」を比較し、同じ個所が「１」であれば（ステップ２０３：Ｎ）、バッファサイズの変更は行わない。違う個所が「１」になっていれば（ステップ２０３：Ｙ）、ステップ２０４において全ログ出力処理部１０１２が障害発生時用ログバッファ１０１４のサイズの変更を行い、バッファサイズ管理テーブル４００の「現在のサイズ」の状態を更新する。「現在のサイズ」は障害発生時用ログバッファ１０１４が現在どのサイズでバッファを確保しているかを示している。
【００１９】
ステップ２０５で、全ログ出力処理部１０１２において障害発生時用ログバッファ１０１４にログレベルに関係なくアプリケーションプログラムプロセス１００１、１００２から受け取ったすべてのログ情報を記録する。図５に内部バッファテーブルを示す。ステップ２０５ではログ出力プログラム１０１が受け取ったすべてのメッセージＩＤとメッセージのログ情報およびプロセスＩＤを内部バッファテーブル５００に追加していくことになる。この際、アプリケーションプログラムプロセス１００１、１００２が同時に実行されていると、早いものから順に書き込まれていく。
【００２０】
ステップ２０６で、全ログ出力処理部１０１２においてメッセージＩＤから異常メッセージのＩＤであるかどうかを判断し、異常のメッセージＩＤであった場合は（ステップ２０６：Ｙ）、ステップ２０７でその障害発生時用ログバッファ１０１４から障害が発生したプロセスのログ情報のみを抽出し、障害発生時ログファイル１０３としてファイル出力する。異常のメッセージＩＤでなければ（ステップ２０６：Ｎ）ファイル出力はされないため、ディスク容量を圧迫することもない。
【００２１】
ステップ２０７の処理手順を図３を用いて説明する。
【００２２】
異常時のメッセージを受け取ると、ステップ３００で障害発生時用ログバッファの先頭から、障害が発生したプロセスのログ情報の検索を開始する。内部バッファテーブルの「プロセスＩＤ」を参照し、ステップ３０１で障害が発生したプロセスのログ情報であるかを判断し、該当すれば（ステップ３０１：Ｙ）別領域にその情報を退避する。該当しなければ（ステップ３０１：Ｎ）、ステップ３０５で次のバッファのログ情報を検索する。
【００２３】
ステップ３０３で、バッファの最後まで検索済みかを判定し、最後まで検索したら（ステップ３０３：Ｙ）、ステップ３０２で退避しておいた障害が発生したプロセスのみのログ情報を全ログ出力処理部１０１１が障害発生時ログファイル１０３としてテキスト形式のファイルに出力する。
【００２４】
図６に出力されたログファイルの例を示す。ステップ２０２で出力されたファイルが、通常出力ログファイル６００の内容となり、ステップ３０４で障害が発生したプロセスのログ情報のみをファイルに出力したものが障害発生時ログファイル６０１の内容となる。通常出力ログファイル６００には、複数のプロセスが実行されると障害が発生したプロセスのログだけではなく、すべてのプロセスのログが混在して出力されるが、障害発生時ログファイル６０１には、障害が発生したプロセスのログ情報しか出力されない。
【００２５】
障害発生時ログファイル６０１にあるように、障害が発生したプロセスのログ情報のみ、関数の呼び出しおよび関数の引数も記録された詳細なログ情報を解析することで、ログの解析を容易に行うことが可能となる。
【００２６】
上記の例では、ファイルへの出力をテキスト形式としたが、バイナリ形式として保存し、アプリケーションプログラムのログ編集ツールなどを用いて解析しても良い。
【００２７】
【発明の効果】
本発明のログ出力方法によれば、低いログレベルで実行されていても障害発生時は障害が発生したプロセスのみの詳細なログ情報を出力でき、障害の解析を容易に行うことが可能となる。
【００２８】
また、本発明のログサイズ動的変更方法によれば、アプリケーションの負荷状況に応じて内部で保持するバッファのサイズを動的に変更することにより、ラップアラウンドの頻度が少なくなり、より多くの情報が残ることで必要なログ情報の欠落を防止することが可能となる。
【図面の簡単な説明】
【図１】本発明に係るシステム構成を示す図である。
【図２】ログ出力処理のフローチャートを示した図である。
【図３】障害発生時の該当プロセスのログ情報を抽出し出力するフローチャートを示した図である。
【図４】バッファサイズ管理テーブルの一例を示した図である。
【図５】内部バッファテーブルの一例を示した図である。
【図６】通常出力ログファイルと障害発生時ログファイルの出力例を示した図である。
【符号の説明】
１００１　アプリケーションプログラムプロセス
１００２　アプリケーションプログラムプロセス
１０１　ログ出力プログラム
１０１１　通常ログ出力処理部
１０１２　全ログ出力処理部
１０１３　プロセス監視処理部
１０１４　障害発生時用ログバッファ
１０２　通常出力ログファイル
１０３　障害発生時ログファイル
【図１】
2004139483.tif 000003
【図２】
2004139483.tif 000004
【図３】
2004139483.tif 000005
【図４】
2004139483.tif 000006
【図５】
2004139483.tif 000007
【図６】
2004139483.tif 000008