(57)【特許請求の範囲】
【請求項１】
プログラムのログ情報を、コンピュータによって、当該ログ情報の出力詳細度を表すログレベルに応じて取得し出力する方法であって、
前記コンピュータの処理として、
前記プログラムの関数もしくは処理ごとに少なくとも１つ以上のログレベルおよびデフォルトログレベルの組が、出力するログ情報の種類を指定する種類別オプション、出力するログ情報を重要度別に指定する重要度別オプション、出力するログ情報の内容を指定するログ出力内容オプションの少なくともいずれか１つのオプション情報として定義された情報を記憶装置に記憶するステップと、
入力手段で入力した入力情報により、前記関数もしくは処理ごとに定義した前記１つ以上のログレベルが指定された場合には該指定されたログレベルを採用して上記記憶装置に記憶した定義情報を参照し、前記種類別オプション、前記重要度別オプション、前記ログ出力内容オプションの少なくともいずれか１つのオプション情報として定義された当該ログレベルに応じたログ情報を取得して出力し、
何も指定されない場合には前記デフォルトログレベルを採用して上記記憶装置に記憶した定義情報を参照し、前記種類別オプション、前記重要度別オプション、前記ログ出力内容オプションの少なくともいずれか１つのオプション情報として定義された当該ログレベルに応じたログ情報を取得して出力するステップと
を有することを特徴とするログ情報取得出力方法。
【請求項２】
請求項１記載のログ情報取得出力方法において、
前記記憶装置に記憶した前記ログレベルの定義情報では、少なくとも、どの関数もしくはどの処理がどのログレベルに当たるかが定義され、対応する前記関数もしくは処理がプログラム実行中に参照することを特徴とするログ情報取得出力方法。
【請求項３】
請求項２記載のログ情報取得出力方法において、
アプリケーションプログラムが、前記各ログレベルが如何なるログ情報を取得するかを定義したログレベル定義情報を、前記関数もしくは処理に入力するステップと、
前記関数もしくは処理が、前記入力されたログレベル定義情報に基づいてログの取得の判定を行なうステップ
を有することを特徴とするログ情報取得出力方法。
【請求項４】
請求項３記載のログ情報取得出力方法において、
前記ログレベル定義情報を、処理のコストまたはプログラム実行中の処理の負荷に応じて変更することを特徴とするログ情報取得出力方法。
【請求項５】
前記コンピュータに、請求項１〜４のいずれか１項に記載のログ情報取得出力方法における各ステップでの処理を実行させるプログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータプログラムのログ情報を取得する場合のログレベルを定義するログレベル定義方法に係り、特に、関数もしくは処理ごとに所望するログ情報を出力することが可能なログレベル定義方法に関する。
【０００２】
【従来の技術】
情報処理装置における状態情報や障害情報などはログ情報（履歴、ジャーナル）として保存され、システムの保全対策、障害の回復処理、信頼性向上対策などに利用される。従来のログ取得方法においては、アプリケーションプログラムで初期化処理を行う際に、いくつかのオプションを選択して、そのオプションで定義されたログを取得するようにしていた。これによると、例えば、データベースへの参照コマンドのログを取得するオプションや、データベースへの書込みコマンドのログを取得するオプションなどいくつかの処理内容に応じて、最適なログの取得内容を定義することができる。
【０００３】
【発明が解決しようとする課題】
しかしながら、上述した従来技術では、例えば、データベース接続など詳細にログを取得したい関数と、データベース検索途中などあまり詳細にログを取得したくない処理が混在して存在する場合に、それらを区別してログを取得することができないという問題があった。
【０００４】
また、関数ごとにログの取得詳細度を変えるには、プログラムコーディングの際に予めオプションを記述しておかなければならず、後でアプリケーションユーザの要求に基づいてこれを変更することはできないという問題があった。
【０００５】
また、このようにオプションで定義されたログ出力方法は、プログラム処理の高速化の点で最適化されていないという問題があった。
【０００６】
本発明の目的は、ユーザが関数もしくは処理ごとに所望するログ情報を出力するためのログレベルを定義するログレベル定義方法、また、ユーザが予め定義したログレベル定義情報に基づいて、アプリケーションプログラムの要求に基づいたログレベルでの出力を、プログラムのソースコードを書き換えることなく変更することができるログレベル定義方法を提供することである。
【０００７】
本発明の他の目的は、前記ログレベル定義情報をプログラムの全体処理が高速化するように最適化して変更し、プログラムのソースコードを書き換えることなく、前記最適化されたログレベル定義情報に基づいてログ情報を出力することのできるログレベル定義方法を提供することである。
【０００８】
本発明の他の目的は、上述したログレベル定義方法を記録した記録媒体を提供することである。
【０００９】
【課題を解決するための手段】
本発明は、上記目的を達成するために、関数もしくは処理ごとに少なくとも１つ以上のログレベルおよびデフォルトログレベルを定義し、該関数もしくは処理ごとに定義した前記ログレベルのうちの１つ以上のログレベルまたは前記デフォルトログレベルが指定された場合にはその指定されたログレベルまたはデフォルトログレベルを採用するとともに、何も指定されない場合には前記デフォルトログレベルを採用するようにしたこと、該ログレベルの定義は、どの関数もしくはどの処理がどのログレベルに当たるかを定義するものであり、対応する関数もしくは処理がプログラム実行中に参照可能であることを特徴としている。
【００１０】
さらに、アプリケーションプログラムが、各ログレベルが如何なるログ情報を取得するかを定義したログレベル定義情報を、前記関数もしくは処理に入力し、該関数もしくは処理が、前記入力されたログレベル定義情報に基づいてログの取得の判定を行なうこと、また、その場合のログレベル定義情報は、処理のコストまたはプログラム実行中の処理の負荷に応じて変更可能としたことを特徴としている。
【００１１】
さらに、本発明の記録媒体は、上記各ログレベル定義方法における処理をプログラムコード化して記録したコンピュータ読み取り可能な記録媒体である。
【００１２】
【発明の実施の形態】
（発明の概要）
本発明は、アプリケーションプログラムの初期化処理において定義されるログレベル定義情報と、このログレベル定義情報に基づいて各関数もしくは各処理ごとにレベルを定義するための入出力手段と、各関数もしくは各処理から参照することができ、各関数もしくは各処理ごとにレベルを定義したログレベル定義テーブルとを備える。また、さらにアプリケーションプログラム実行時の処理負荷や処理時間などを計測する手段と、計測結果に基づいてログレベル定義テーブルの内容を書き換える手段を備える。
【００１３】
これによって、ユーザが関数もしくは処理ごとに所望するログ情報を出力するためのログレベルを定義することができ、またアプリケーションプログラムの要求に基づいたログレベルでの出力を、プログラムのソースコードを書き換えることなく変更することが可能になる。また、ログレベル定義情報をプログラムの全体処理が高速化するように最適化し、プログラムのソースコードを書き換えることなく最適化されたログレベル定義情報に基づいてログ情報を出力することが可能になる。
【００１４】
（第一の実施例）
以下、本発明の第一の実施例を、図面を用いて詳細に説明する。
図１は、本実施例を説明するためのシステム構成の模式図である。
同図において、１０１は、コンピュータ１（Ａ）内のメモリに読み込まれた本実施例に係る機能ブロック構成を示している。１０１は、外部記憶装置１０８、入出力装置１０９、コンピュータ２（Ｂ）にネットワークを介して接続されている。１０１内の各処理部を形成するプログラムは図示しないＣＰＵなどと連携して所望の処理機能を遂行する。
【００１５】
コンピュータ２（Ｂ）のメモリ１１１には本実施例でログレベル定義取得方法を呼び出す側のアプリケーションプログラムＡＰ（１１２）が読み込まれている。ここで１０１を含むコンピュータ１（Ａ）とコンピュータ２（Ｂ）とは同一のコンピュータであってもよい。本実施例においては、１０１は少なくとも１つの目的のために機能する処理を持ち、処理部Ａ（１０５）および処理部Ｂ（１０６）を含んでいる。１０１は処理部Ａ（１０５）のみの場合もあり、あるいは処理部Ａおよび処理部Ｂの他に１以上の処理部を持つこともできる。
【００１６】
初期設定処理部１０２は、呼び出し側アプリケーションプログラムＡＰ（１１２）が利用することのできるログレベルの初期設定を行う処理であって、ログレベル定義テーブル１（１０３）を用いてログ出力フォーマットを定義する。ログレベル定義テーブル１（１０３）は、ログレベルのオプションと出力方法のオプションが予め定義されており、ログとその出力フォーマットを定めるために参照されるテーブルである。ログレベル定義テーブル２（１０４）は各レベルとそのレベルに対応する関数のリストである。
【００１７】
処理部Ａ（１０５）および処理部Ｂ（１０６）は、いずれもアプリケーションプログラムＡＰ（１１２）から呼び出される処理部である。処理部Ａ（１０５）は、少なくともログレベル入力部１０５１、その他のアプリケーションプログラム本来の目的を果たすための処理部１０５２、ログ情報取得部１０５３から構成され、処理部Ｂ（１０６）は、少なくともログレベル入力部１０６１、その他のアプリケーションプログラム本来の目的を果たすための処理部１０６２、ログ情報取得部１０６３から構成されている。ここでは処理部として処理部Ａ（１０５）と処理部Ｂ（１０６）の２つある例を示したが、２つ以上の処理部があってもよいことは先に述べた通りである。
【００１８】
ログ出力処理部１０７は、本実施例のログ取得方法に従って、処理部Ａ（１０５）のログ情報取得部１０５１または処理部Ｂ（１０６）のログ情報取得部１０６１によって得たログ情報を、外部記憶装置１０８もしくは入出力装置１０９に出力するための処理部である。
【００１９】
最適化処理部１１０は、ログレベルの最適化処理を行い、ログレベル定義テーブル２（１０４）を更新するための処理部であり、最適化を行わない場合は必要でない。
【００２０】
図１において、アプリケーションプログラムＡＰ（１１２）は、まず、初期設定処理部１０２によってアプリケーションプログラム全体で利用可能なログレベルの定義を行い、次にユーザが選択した処理部Ａ（１０５）で使用するログレベルの値を処理部Ａ（１０５）のログレベル入力部１０５１に入力として受け渡し、処理部Ａ（１０５）のその他の処理部１０５２でアプリケーションプログラム本来の目的を達成するための処理を行う過程において指定されたレベルでのログの取得を行う。取得されたログ情報はログ出力処理部１０７によって外部記憶装置１０８もしくは入出力装置１０９に出力される。
【００２１】
続いてアプリケーションプログラムＡＰ（１１２）は、処理部Ａ（１０５）の次に実行される処理部Ｂ（１０６）に対して、ユーザが選択した処理部Ｂ（１０６）で使用するログレベルの値を処理部Ｂ（１０６）に入力として受け渡し、処理部Ｂ（１０６）でアプリケーションプログラム本来の目的を達成するための処理を行う過程において指定されたレベルでのログの取得を行う。以下同様に、アプリケーションプログラムＡＰ（１１２）が必要とする処理において、ログレベルの指定とそのレベルに基づいたログ情報の取得および出力が繰り返される。
【００２２】
図２は、本実施例における初期設定処理部１０２の処理フローチャートを示す図である。
アプリケーションプログラムＡＰ（１１２）の初期化処理が行われるとき、本実施例のログレベル定義取得方法の初期化もこの初期設定処理部１０２内にて行われる。
【００２３】
同図に示すように、まず、ステップ２０１でアプリケーションプログラムＡＰ（１１２）から渡された入力情報にログレベル定義テーブル１（１０３）のログレベル設定があるかどうか判定する。ステップ２０１における判定の結果、ログレベル設定があれば（ステップ２０１：Ｙ）、次に、ステップ２０２においてログレベルオプションの設定があるかどうか判定する。
【００２４】
ステップ２０２における判定の結果、ログレベルオプションの設定があれば（ステップ２０２：Ｙ）、次に、ステップ２０４においてログレベル定義テーブル１（１０３）を参照して設定されたログレベル情報を読み込む。
【００２５】
次に、ステップ２０５において同じくアプリケーションプログラムＡＰ（１１２）から渡された入力情報にログ出力内容オプションの設定があるかどうか判定する。ステップ２０５における判定の結果、もしログ出力内容オプションの設定があれば（ステップ２０５：Ｙ）、ステップ２０７においてログレベル定義テーブル１（１０３）を参照して設定された出力内容を読み込む。
【００２６】
また、ステップ２０１の判定の結果、ログレベル設定がされていなかった場合は（ステップ２０１：Ｎ）、ステップ２０８において定義テーブル１（１０３）を参照してデフォルトのレベル情報および出力内容を読み込む。
【００２７】
また、ステップ２０２の判定の結果、ログレベルオプションが指定されていなかった場合は（ステップ２０２：Ｎ）、ステップ２０３においてログレベル定義テーブル１（１０３）を参照してデフォルトログレベル情報を読み込む。
【００２８】
また、ステップ２０５の判定の結果、ログ出力オプションが指定されていなかった場合は（ステップ２０５：Ｎ）、ステップ２０６においてログレベル定義テーブル１（１０３）を参照してデフォルトの出力内容を読み込む。
【００２９】
以上のようにして得られたログレベルとログ出力内容を基に、ステップ２０９において、この二つの値を組み合わせて当該アプリケーションプログラム用としてログ出力部１０７が利用可能なログ情報出力フォーマットを定義する。
【００３０】
図７は、本実施例におけるログ情報出力フォーマットの例を示す図である。
ここで、図７のログ情報出力フォーマット（７００）について説明する。
【００３１】
図７のログ情報出力フォーマット（７００）の例では、まず初期情報として、ログ出力先、アプリケーションプログラムが利用可能なログレベル定義、アプリケーションプログラムが利用可能なログ出力情報の定義を出力し、アプリケーションプログラムの開始を記録する（以上図７の（イ）参照）。
【００３２】
続く各処理部Ａ、Ｂ・・それぞれについて、処理内部で定義されるログレベル、ログ出力情報を出力し、処理の開始、各関数のログ出力、処理の終了のログを、それぞれ定められたフォーマットで出力する。最後にアプリケーションプログラム終了のログを出力して終わる（以上、図７の（ロ）参照）。
【００３３】
次に、ログレベル定義テーブルにおける各ログレベルおよび各ログ出力内容オプションについて詳細に説明する。
【００３４】
図３は、本実施例におけるログレベル定義テーブル１（１０３）の例を示す図である。
ログレベル定義テーブル１（１０３）は、本実施例では、図３（ａ）に示す情報の種類別オプション３０１と、同図（ｂ）に示す情報の重要度別オプション３０２と、同図（ｃ）に示すログ出力内容オプション３０３の定義を持つ。
【００３５】
これら３つの定義はいずれか１つだけであっても本発明の目的を達することが可能である。また、情報の種類別オプションと情報の重要度別オプションの指定によって、ある関数についてログ要否の矛盾が生じたときは少なくともどちらか一方で指定された関数についてはログ情報として出力する。ログレベル定義テーブル１はアプリケーションユーザに公開されており、ここに定められた定義を組み合わせてアプリケーションユーザは所望するログ出力情報の定義を行うことができる。
【００３６】
情報の種類別オプション３０１は、ログ情報の示す内容ごとに分類したものである。例えば、図３（ａ）の例では、「ログレベル１」はエラー情報を示し、「ログレベル２」は処理時間情報を示し、「ログレベル３」はネットワーク制御情報を示し、「ログレベル４」はデータベース制御情報を示し、「ログレベル５」は正常に動作したときのメッセージ情報を示している、などである。
【００３７】
ユーザは自分が望むログ出力内容に応じて、これらの値を組み合わせて指定することができる。例えば、エラー情報だけを出力したい場合は「ログレベル１」を指定し、エラー情報に加えてデータベース制御情報も出力したい場合は「ログレベル１」と「ログレベル４」を指定する。また逆にデータベース制御情報を出力したくない場合は「−４」と指定してもよい。情報の種類別オプション３０１の例で指定値がなかった場合のデフォルトログレベル（図３を含む各図において「デフォルトレベル」とも記載）は「ログレベル１」である。
【００３８】
図３（ｂ）に示す情報の重要度別オプション３０２は、ログの重要度ごとに分類したものである。例えば、図３（ｂ）の例では、「ログレベルＨ」は最も重要度の高いログ情報であって、システム情報のみを含む。「ログレベルＭ」は中程度のログ情報であって、上記「ログレベルＨ」の情報に付け加えてさらにアプリケーションプログラムが必要とする情報も含む。「ログレベルＬ」は、上記「ログレベルＭ」に付け加えてさらにメッセージ情報も含む。
【００３９】
ユーザは自分が望むログ出力内容と処理にかかる負荷を考慮していずれかを選ぶことができる。例えば、ログ出力によって生じるコンピュータの負荷を最小限に押さえたければ「ログレベルＨ」を指定する。反対に多少負荷がかかってもたくさんのログを出力したければ「ログレベルＬ」を指定する。図３（ｂ）の情報の重要度別オプション３０２の例で指定値がなかった場合のデフォルトログレベルは「ログレベルＨ」である。
【００４０】
図３（ｃ）に示すログ出力内容オプション３０３は、ログ出力する際の出力内容ごとに分類したものであり、出力フォーマットを定めるために参照される。例えば、図３（ｃ）のログ出力内容オプション３０３の例ではOutput１は関数のログを出力する前と後のタイムスタンプを出力し、Output2は関数のログ出力中に発生した最大ＣＰＵ負荷値を出力し、Output3は関数発行結果のメッセージを出力する、などである。指定されなかった場合のデフォルトはOutput１＋Output２、すなわち、関数のログ出力前後のタイムスタンプと関数ログ出力中の最大ＣＰＵ負荷値を出力する、である。
【００４１】
図４および図５は、本実施例におけるログレベル定義テーブル２（１０４）の定義方法を示す図である。
ログレベル定義テーブル２（１０４）は、各ログレベルとそれに対応する関数のリストである。このログレベル定義テーブル２（１０４）はアプリケーションユーザに公開してもしなくてもよい。アプリケーションユーザがこれらのリストについて直接知る必要はないので、このログレベル定義テーブル２（１０４）をユーザから隠蔽することも可能である。
【００４２】
このように、ログレベル定義テーブル２（１０４）をユーザから隠蔽することにより、ユーザが関数ごとの定義について詳細に知ることなく、ログレベル定義テーブル１だけを使ってログ出力情報の定義を行うことが容易となる。ログレベル定義テーブル２（１０４）の定義方法には２種類の方法が考えられる。それぞれを定義方法（１）、定義方法（２）として説明する。
【００４３】
図４は、定義方法（１）を説明するための図であり、図５は、定義方法（２）を説明するための図である。
まず、定義方法（１）では図４（ａ）の４０１に示すように、レベル情報種類（１，２，３，４，５）とそれらに対応する処理関数リストが定義され、図４（ｂ）の４０２に示すように、レベル重要度（Ｈ，Ｍ，Ｌ）とそれらに対応する処理関数リストが定義されている。
【００４４】
図４（ａ）の４０１の例でレベル１の時、ログ出力される関数はerror()だけである。アプリケーションプログラムからある処理部Ａでレベル１が設定されると、コンピュータはメモリにerror()を記憶し、処理Ａが実行されている間はerror()を発行した時のログを出力する。同様にしてレベル重要度Ｈが設定されると、error()とdb.connect()の関数を発行した時のログを出力する。
【００４５】
図６は、本実施例における処理部Ａの処理フローチャート例（定義方法（１）の場合）を示す図である。
同図に示すように、ステップ６０１において処理部Ａの外部からログ取得レベル要求が指定されたかを判定し、判定の結果、ログ取得レベル要求が指定されていれば（ステップ６０１：Ｙ）、ステップ６０２において、指定されたログレベル定義テーブル２（１０４）を参照して該当するログ出力対象レベルの関数群を全て記憶する。
【００４６】
ステップ６０１の判定の結果、ログ取得レベル要求が指定されていなければ（ステップ６０１：Ｎ）、次に、ステップ６０３において処理Ａ内部に当該処理部向けデフォルトログレベルが設定されているかを判定する。判定の結果、当該処理部向けデフォルトログレベルが設定されていれば（ステップ６０３：Ｙ）、ステップ６０２へ進み、当該処理部向けデフォルトログレベルが設定されていなければ（ステップ６０３：Ｎ）、ステップ６０４において処理２０９によって定められたアプリケーションプログラムにおけるデフォルトログレベルを読み込む。
【００４７】
このようにログ出力対象レベルに該当する関数群を全て記憶した上で、ステップ６０５で処理Ａの処理の中からステップを読み込み、そのステップに含まれる関数がログ出力対象であるかどうかを判定する。ステップ６０５での判定の結果、ログ出力対象であれば（ステップ６０５：Ｙ）、ステップ６０６で開始ログ情報を取得し、ステップ６０７で関数の発行を行い、ステップ６０８で終了ログ情報を取得した後、ステップ６０５に戻って次の関数に対して同様の処理を繰り返す。
【００４８】
一方、ステップ６０５での判定の結果、ログ出力対象でなければ（ステップ６０５：Ｎ）、関数を発行した後（ステップ６０９）、ステップ６０５に戻って次の関数に対して同様の処理を繰り返す。
このように、処理部Ａにおいて処理される関数の数だけステップ６０５から６０８が繰り返される。
【００４９】
ここで、図６のステップ６０６およびステップ６０８で取得する開始ログ情報および終了ログ情報について説明する。
図６のステップ６０６およびステップ６０８で取得する開始ログ情報および終了ログ情報は、例えば、後述する図８の文８０６でいえば、「Method-A: db.connect: start time 00.01.26: end time 00.03.05：maximum CPU status５１％」のうちの“start time 00.01.26”および“end time 00.03.05”に相当している（他の関数に対する文も同様）。
【００５０】
このように、処理Ａの中のある関数（例えば db.connect）を発行する場合、db.connect がシステムに及ぼした影響、負荷を後で計算するために、db.connectの開始時間を計測し（ステップ６０６）、関数db.connect を発行し（ステップ６０７）、db.connectが終了した時間を計測し（ステップ６０８）、さらに db.connect 発行中の最大負荷 maximum CPUを計測して記録する。したがって、図６のステップ６０６〜６０８（後述する図９のステップ９０６〜９０８も同様）は、処理Ａ内で行われる個々の関数分全てに対して行われる（文８０５〜８０９参照）。
【００５１】
このように、定義方法（１）で定義した場合の利点は、アプリケーションプログラムであるレベルが設定された時にコンピュータがログ出力対象関数として検索すべき関数が予め該当するレベルの関数群にのみ絞られているので、対象関数を検索し判定する際のその関数群のみを検索すればよいので処理の高速化が可能であるという点である。不利な点は、最適化処理部１１０で最適化する際にログレベル定義テーブル２（１０４）の更新が次に述べる定義方法（２）の場合に比べて手間がかかる点である。
【００５２】
図８は、上述した処理によって得られる図７のログ出力フォーマットに対応するログ情報（８００）の出力例を示す図である。以下、図８のログ情報（８００）の出力例について詳細に説明する。
【００５３】
同図において、文８０１は、このログ出力のファイル名が“logout.txt”であることを示している。
文８０２は、当該アプリケーションプログラムＡＰ（１１２）が利用可能なログレベルは“１”，“２”，“３”，“４”，“５”，および“Ｌ”（すなわち種類別オプションとして「１＝エラー情報」、「２＝処理時間情報」、「３＝ネットワーク制御情報」、「４＝データベース制御情報」、「５＝正常メッセージ情報」、重要度別オプションとして「Ｌ＝システム情報＋アプリケーション情報＋メッセージ情報」であり（図３（ａ）（ｂ）参照）、出力オプションが“デフォルト”（１＋２；すなわち「１＝タイムスタンプ」と「２＝ＣＰＵ負荷」）であることを示している（図３（ｃ）参照）。
【００５４】
文８０３は、アプリケーションプログラムＡＰ（１１２）のスタート時間が“00.00.00”で、その時のＣＰＵ負荷が“３％”であったことを示している。
【００５５】
文８０４は、次に実行される処理Ａのログレベルが“１”＋“Ｍ”であり、出力オプションが“デフォルト”（１＋２；すなわち「１＝タイムスタンプ」と「２＝ＣＰＵ負荷」）のままであることを示している。
【００５６】
文８０５は、処理Ａの実行開始時間が“00.00.00”で、終了時間が“00.00.08”であり、そのときのＣＰＵ負荷の最大値が“３％”であることを示している。
【００５７】
文８０６は、次の関数（db.connect）の実行開始時間が“00.01.26”で、終了時間が“00.03.05”であり、そのときのＣＰＵ負荷の最大値が“５１％”であることを示している。
【００５８】
同様にして、文８０７は、次に実行される関数（db.query）の実行開始時間が“00.38.56”で、終了時間が“02.43.22”、そのときのＣＰＵ負荷の最大値が“８０％”であり、文８０８は、次に実行される関数（db.disconnect）の実行開始時間が“08.00.04”で、終了時間が“08.00.05”、そのときのＣＰＵ負荷の最大値が“１５％”であり、文８０９は、処理Ａの終了（exit）の開始時間が“10.29.72”で、終了時間が“10.29.73”、そのときのＣＰＵ負荷の最大値が“５％”であることを、それぞれ示している。
【００５９】
次の処理Ｂについては、文８１０に示されているように、ログレベル“１”（１＝エラー情報）のみで、ログ出力形式デフォルト（１＋２；すなわち「１＝タイムスタンプ」と「２＝ＣＰＵ負荷」）のままであることを示している。本例は、正常に処理が終了してエラーが発生しないため、ログ情報が何も出力されない場合を示している。
【００６０】
次の処理Ｃについては、文８１１に示されているように、ログレベルが“１”＋“５”（すなわち「１＝エラー情報」、「５＝正常メッセージ情報」；図３（ａ）（ｂ）参照）で、ログ出力オプションが“１”＋“２“＋“３”（すなわち「１＝タイムスタンプ」＋「２＝ＣＰＵ負荷」＋「３＝メッセージ」；図３（ｃ）参照）の場合である。
【００６１】
文８１２は、処理Ｃの開始（start）の実行開始時間が“15.25.07”で、終了時間が“15.25.08”であり、そのときのＣＰＵ負荷の最大値が“３％”であることを示している。
【００６２】
文８１３は、時間“16.21.00”にエラーが発生し、そのときのＣＰＵ負荷が“８５％”であり、エラーコードが２１７８、エラー情報２１９９，３８７５，２４５“インバリッドオペレーション”であることを示している。
【００６３】
文８１４は、時間“18.11.17”に、ＣＰＵ負荷８０％でエラーリターンしたことを示している。
文８１５は、アプリケーションプログラムＡＰ（１１２）の終了時間が“18.36.25”、ＣＰＵ負荷が“３％”、エラーコード２１７８で処理Ｃを終了したことを示している。
【００６４】
次に、定義方法（２）について詳細に説明する。
定義方法（２）では、図５の５０１に示すように、処理関数ごとにログ取得レベルの情報別オプションと重要度別オプションが定義されている。例えば、５０１の例では、db.connect()の種類別オプションは４であり、重要度別オプションはＨである。このリストの処理関数は検索を高速にするために予めインデックス作成されていてもよい。
【００６５】
アプリケーションプログラムＡＰ（１１２）から処理部Ａが実行され、出力すべきログ情報の設定が行われる。処理部Ａの中である関数が発行されると、この処理関数を定義テーブル５０１から検索し、設定された種類別オプションおよび重要度別オプションと比較して、該当するオプションがあればそのログを出力し、該当するオプションがなければ出力しない。
【００６６】
図９は、本実施例における処理部Ａの処理フローチャート例（定義方法（２）の場合）を示す図である。
同図に示すように、ステップ９０１で処理部Ａの外部からログ取得レベル要求が指定されたかを判定し、判定の結果、ログ取得レベル要求が指定されていれば（ステップ９０１：Ｙ）、ステップ９０２で処理Ａの本来の目的を果たすための処理のステップに移る。
【００６７】
また、ステップ９０１での判定の結果、ログ取得レベル要求が指定されていなければ（ステップ９０１：Ｎ）、ステップ９０３で処理Ａ内部にデフォルトログレベルが設定されているかを判定し、判定の結果、デフォルトログレベルが設定されていれば（ステップ９０３：Ｙ）、ステップ９０２へ進み、デフォルトログレベルが設定されていなければ（ステップ９０３：Ｎ）、ステップ９０４においてアプリケーションプログラムＡＰ（１１２）でのデフォルトログレベルを読み込み、ステップ９０２へ移る。
【００６８】
ステップ９０２で処理すべき次の関数が指定されると、ステップ９０５で指定されたログレベル定義テーブル２（１０４）を参照してログ出力対象レベルの関数であるかを判定する。判定の結果、ログ出力対象の関数であれば（ステップ９０５：Ｙ）、ステップ９０６で開始ログ情報を取得し、ステップ９０７で関数の発行を行い、ステップ９０８で終了ログ情報を取得した後、ステップ９０２に戻る。
【００６９】
ステップ９０５での判定の結果、ログ出力対象の関数でなければ（ステップ９０５：Ｎ）、ステップ９０９で関数の発行を行った後、ステップ９０２に戻る。
【００７０】
ステップ９０２からステップ９０８は、処理部Ａが処理する関数の数だけ繰り返される。その結果、定義方法（１）の場合と同様に図８に示すような如きログ情報が得られる。
【００７１】
定義方法（２）で定義した場合の利点は、処理ごとに一覧で定義されているので、最適化処理によるオプションの差し替えが容易にできる点である。例えば、図８の文８０７のdb.query()が最適化処理の結果、重要度がＭからＬに下げられるときも、テーブルの中でdb.query()の該当部分だけを更新すればよい。不利な点は、処理リストの並び方によっては、定義方法（１）に比べて処理の検索に時間がかかる可能性が大きいという点である。
【００７２】
本システムのユーザは、定義方法（１）および（２）の利点と不利な点を比較検討した上で、より望ましい定義方法を選択して定義することができる。また両方の定義方法で定義しておいて、アプリケーションユーザの目的に合わせてどちらか一方のテーブルを選択させて処理させるようにしてもよい。
【００７３】
以上の手段によって本実施例ではアプリケーションプログラムごとに使用可能なログレベルを定義し、アプリケーションプログラムの処理ごとにログ取得レベルを変更してログ出力することが可能である。
【００７４】
次に、出力されたログ情報（図８）を基にログ出力を最適化する処理について述べる。
図１０は、本実施例における最適化処理部１１０の処理フローチャートを示す図である。
同図において、ステップ１００１でユーザによって値Ｘの最適化処理オプション（Ｘ）が指定される。この場合、最適化処理オプションの値Ｘは、例えば、ログ出力にかかる処理時間や、ログ出力のためにかかる最大ＣＰＵ負荷値などである。ステップ１００１で指定された値Ｘを最適化するために、ステップ１００２において、後述する重要度分類しきい値テーブル（図１１）を参照し、その情報を記憶する。
【００７５】
ステップ１００３でログ情報８００を参照し、ステップ１００４で最適化処理オプションの値Ｘのトータル値を取得する。次にステップ１００５でログ情報８００のうち、最適化処理オプションの値Ｘが高いものから順に並び替えて記憶し、ステップ１００６でしきい値の分類に従って、ログレベル定義テーブル２（１０４）の内容を更新する。
【００７６】
図１１は、本実施例における重要度分類しきい値テーブル（１１０１）の例を示す図である。図１１では、重要度レベルは最適化処理オプションの値Ｘのトータル値に対するその関数あるいは処理の最適化処理オプションの値Ｘの割合によって決定されている。
【００７７】
具体的には、同図において、重要度レベルＨは、最適化処理オプションの値Ｘのトータル値に対して、その関数あるいは処理の最適化処理オプションの値Ｘが１％未満のものを指し、重要度レベルＭは、同じく１％以上１０％未満のものを指し、重要度レベルＬは、同じく１０％以上のものを指す場合の例を示している。
【００７８】
従って、図８のログ出力情報の例では、処理時間を最適化処理オプションの値Ｘとした場合、処理時間のトータル値18.36.25に対して、最も高い割合を占めているMethod-Aのdb.query（スタート時刻“00.38.56”、終了時刻“02.43.22”）（文８０７参照）のレベル重要度がＬとなり、ログレベル定義テーブル２（１０４）でのdb.queryのレベル重要度がＭからＬに更新される。つまり、レベル重要度がＭからＬに下げられたことになり、次回からはレベルＬを要求しない限りdb.queryのログは出力されない。
【００７９】
以上述べたように本実施例によれば、アプリケーションプログラムごとに取得するログレベルとフォーマットを定義し、アプリケーションプログラム内の処理ごとに取得するログレベルと出力形式を変えて出力することが可能である。また、出力されたログ情報を基に、ある値Ｘについて最適化処理を行い、重要度の更新を自動で行うことが可能である。
【００８０】
本実施例によれば、アプリケーションユーザは所望するログ出力内容と重要度に応じてログの取得レベルを定義して、各処理ごとに使い分けることができ、詳細にログ情報を取得したい処理と、そうでない処理を、ソースコードを書き換えることなく変化させることができるという効果が得られる。また、出力されたログ情報をもとにログレベル定義テーブルを書き換えることができるので、ログ処理にかかる負担に応じて出力内容を変化させ、プログラムのソースコードを変更することなく、性能を向上させるために最適なレベルのログ取得を行うことが可能になるという効果が得られる。
【００８１】
次に、本発明に係るログレベル定義方法の第二の実施例を説明する
本第二の実施例は、第一の実施例における処理部Ａを別の実現形態に置き換えたものである。
【００８２】
図１２は、本実施例における処理部Ａの実現形態を示す図である。
本実施例では、同図に示すように、アプリケーションプログラム１２０１は、ユーザが所望するｎ個の関数（関数１（１２０２）、関数２（１２０３）・・・関数ｎ（１２０４））を本来の目的を達成できるように自由に組み合わせて構成する。各関数はインターフェースを通じて、本実施例のログレベル定義取得方法が提供するライブラリ群１２０５を呼び出す。各関数に対応したライブラリ１２０６〜１２０８はそれぞれ開始ログ情報取得部ａ、関数発行部ｂ、終了ログ情報取得部ｃを持っている。
【００８３】
このように、本発明の第二の実施例においては、アプリケーションユーザがその目的に応じて自由に関数を組み合わせてアプリケーションプログラムを構成することができるようにしたことで、ユーザ側での利便性の向上やプログラムの保守が容易になるなどの効果が得られる。
【００８４】
以上説明した実施例によれば、予め取得するログのレベル定義を定めておき、ユーザが関数もしくは処理ごとに所望するログレベルの値を入力してログを取得することができるので、データベースアクセスなど詳細にログ情報を取得したい場合や、逆にデータベース検索であまりログ情報を取得したくない場合など、アプリケーションプログラムの要求に合わせて異なるレベルのログを関数ごとに定義して取得することが可能になる。
【００８５】
また、ユーザが定義したログレベル定義テーブルの変更が容易であるので、プログラムのソースコードを変更することなく、取得するログレベルの変更を行うことが可能になる。
【００８６】
さらに、ユーザが定義したログレベル定義テーブルを処理の高速化に向けて最適化して変更することが容易であるので、プログラムのソースコードを変更することなく、性能を向上させるために最適なレベルのログ取得を行うことが可能になる。
【００８７】
なお、上述した本発明に係るログレベル定義方法を実現する各処理をプログラムコード化して、ＤＶＤ，ＣＤ−ＲＯＭ，ＦＤなどのコンピュータ読み取り可能な記録媒体に記録すれば、市場に容易に流通させることができ、本発明を広く普及させることが可能になる。
【００８８】
【発明の効果】
本発明のログレベル定義方法によれば、ユーザが関数もしくは処理ごとに所望するログレベルのログ情報を出力することができ、特に、ユーザが予め定義したログレベル定義情報に基づいて、アプリケーションプログラムの要求に基づいたログレベルでの出力を、プログラムのソースコードを書き換えることなく変更することが可能になる。
【００８９】
また、ログレベル定義情報をプログラムの全体処理が高速化するように最適化して変更し、プログラムのソースコードを書き換えることなく、最適化されたログレベル定義情報に基づいてログ情報を出力できる。
【００９０】
また、本発明の記録媒体によれば、本発明に係るログレベル定義方法を広く普及させることが容易になる。
【図面の簡単な説明】
【図１】本発明に係るログレベル定義方法の第一の実施例を説明するためのシステム構成の模式図である。
【図２】本発明に係るログレベル定義方法の第一の実施例における初期設定処理部の処理フローチャートを示す図である。
【図３】本発明に係るログレベル定義方法の第一の実施例におけるログレベル定義テーブル１の例を示す図である。
【図４】本発明に係るログレベル定義方法の第一の実施例におけるログレベル定義テーブル２の定義方法（１）を示す図である。
【図５】本発明に係るログレベル定義方法の第一の実施例におけるログレベル定義テーブル２の定義方法（２）を示す図である。
【図６】本発明に係るログレベル定義方法の第一の実施例における処理部Ａの処理フローチャート例（定義方法（１）の場合）を示す図である。
【図７】本発明に係るログレベル定義方法の第一の実施例におけるログ情報出力フォーマットの例を示す図である。
【図８】本発明に係るログレベル定義方法の第一の実施例におけるログ情報の出力例を示す図である。
【図９】本発明に係るログレベル定義方法の第一の実施例における処理部Ａの処理フローチャート例（定義方法（２）の場合）を示す図である。
【図１０】本発明に係るログレベル定義方法の第一の実施例における最適化処理部の処理フローを示す図である。
【図１１】本発明に係るログレベル定義方法の第一の実施例における最適化処理部で参照される重要度分類しきい値の例を示す図である。
【図１２】本発明に係るログレベル定義方法の第二の実施例における処理部Ａの実現方法を示す図である。
【符号の説明】
Ａ：コンピュータ１、
Ｂ：コンピュータ２、
１０１：コンピュータ１（Ａ）のメモリに読み込まれた本発明に係るプログラム構成、
１０２：初期設定処理部、
１０３：ログレベル定義テーブル１、
１０４：ログレベル定義テーブル２、
１０５：処理部Ａ、
１０５１：ログレベル入力部、
１０５２：その他の処理部、
１０５３：ログ情報取得部、
１０６：処理部Ｂ、
１０６１：ログレベル入力部、
１０６２：その他の処理部、
１０６３：ログ情報取得部、
１０７：ログ出力処理部、
１０８：外部記憶装置、
１０９：入出力装置、
１１０：最適化処理部、
１１１：コンピュータ２（コンピュータ１と同一でもよい）のメモリ、
１１２：コンピュータ２（Ｂ）のメモリに読み込まれているアプリケーションプログラム、
３０１：情報の種類別オプションの定義例、
３０２：情報の重要度別オプションの定義例、
３０３：ログ出力内容オプションの定義例、
４０１，４０２，５０１：ログレベル定義テーブル２の定義例、
７００：ログ情報出力フォーマットの例、
８００：ログ情報の例、
１１０１：重要度分類しきい値設定テーブルの例、
１２０１：アプリケーションプログラム、
１２０２〜１２０４：関数１〜ｎ、
１２０５：本発明の第二の実施形態におけるログレベル定義取得方法が提供するライブラリ群、
１２０６〜１２０８：ライブラリ。
【図１】
0003979000.tif 000002
【図２】
0003979000.tif 000003
【図３】
0003979000.tif 000004
【図４】
0003979000.tif 000005
【図５】
0003979000.tif 000006
【図６】
0003979000.tif 000007
【図７】
0003979000.tif 000008
【図８】
0003979000.tif 000009
【図９】
0003979000.tif 000010
【図１０】
0003979000.tif 000011
【図１１】
0003979000.tif 000012
【図１２】
0003979000.tif 000013