(57)【要約】【課題】  アプリケーションプログラムの処理結果のログ情報のうち、必要なログ情報について出力ファイルに書き出す。【解決手段】  アプリケーションプログラム中の命令に従い処理結果のログ情報を出力するログ出力装置において、ロギングコードにより出力されたログ情報と識別コードから、各識別コード毎にログ情報に係る管理出力回数を求め、出力回数が所定回数を越えた場合に、ログ情報をログ出力ファイルとして書き出す。【選択図】  図１
2009163305.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションプログラム中の命令に従い処理結果のログ情報を出力するログ出力装置であって、
前記処理結果のログ情報を出力するためのロギングコードにより出力されたログ情報と、当該ログ情報を一意に識別するための識別コードとを取得するログ情報取得手段と、
前記取得手段で取得されたログ情報を、識別コード毎に識別して、各識別コード毎にログ情報に係る管理出力回数を管理する出力回数管理手段と、
前記出力回数管理手段により管理される出力回数が所定回数を越えた場合に、当該所定回数を越えた出力回数に係るログ情報をログ出力ファイルとして書き出す書出手段と、
を有することを特徴とするログ出力装置。
【請求項２】
前記出力回数管理手段は、識別コード毎に用意されている計数と実際のログ情報の出力回数との積をとることにより得られる管理出力回数を管理することを特徴とする請求項１に記載のログ出力装置。
【請求項３】
前記識別コード毎に用意されている計数を、前記アプリケーションプログラムの利用期間に従って変更する計数変更手段を更に有することを特徴とする請求項２に記載のログ出力装置。
【請求項４】
所定の種別のログ情報を、管理出力回数の値を条件とする書き出し処理の対象外として、前記書出手段により書き出し処理の対象と設定する設定手段を更に有することを特徴とする請求項２または３に記載のログ出力装置。
【請求項５】
アプリケーションプログラム中の命令に従い処理結果のログ情報を出力するログ出力装置におけるログ出力方法であって、
前記処理結果のログ情報を出力するためのロギングコードにより出力されたログ情報と、当該ログ情報を一意に識別するための識別コードとを取得するログ情報取得ステップと、
前記取得ステップで取得されたログ情報を、識別コード毎に識別して、各識別コード毎にログ情報に係る管理出力回数を管理する出力回数管理ステップと、
前記出力回数管理ステップで管理される出力回数が所定回数を越えた場合に、当該所定回数を越えた出力回数に係るログ情報をログ出力ファイルとして書き出す書出ステップと、
を含むことを特徴とするログ出力方法。
【請求項６】
アプリケーションプログラム中の命令に従い処理結果のログ情報を出力するログ出力装置で読み取り実行可能なログ出力プログラムであって、
当該ログ出力装置を、
前記処理結果のログ情報を出力するためのロギングコードにより出力されたログ情報と、当該ログ情報を一意に識別するための識別コードとを取得するログ情報取得手段と、
前記取得手段で取得されたログ情報を、識別コード毎に識別して、各識別コード毎にログ情報に係る管理出力回数を管理する出力回数管理手段と、
前記出力回数管理手段により管理される出力回数が所定回数を越えた場合に、当該所定回数を越えた出力回数に係るログ情報をログ出力ファイルとして書き出す書出手段と、
して機能させることを特徴とするコンピュータ実行可能なログ出力プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ログ出力装置、ログ出力方法及びログ出力プログラムに関し、特に、アプリケーションプログラム中の命令に従い処理結果のログ情報を出力するログ出力装置、ログ出力方法及びログ出力プログラムに関するものである。
【背景技術】
【０００２】
アプリケーションの開発時、あるいは稼働時、おもにその挙動を確認する目的でログ出力に関する実装がプログラム上の任意の場所に配置される。開発過程におけるログ出力は特にデバッグログと呼ばれ、アプリケーションの品質向上を目的に、ログ出力実装はプログラムコードの様々なチェックポイントに配置される。
【０００３】
しかし、前記デバッグログは、アプリケーションリリース時にはその出力が必要最小限に、つまりプログラムコード上から、多くのログ出力実装が取り除かれることになる。これはアプリケーションの実運用時のパフォーマンス向上やログ出力によって消費するストレージ領域の削減を意図したものである。
【０００４】
このため、実運用の開始後、ユーザによる操作等で何らかの障害が発生した場合、出力されているログから原因を特定することは困難であり、開発時同様、デバッグログの出力実装を再度配置したアプリケーションによる現象の再現に立ち戻ることが多い。
【０００５】
以上述べたように、ロギングコードの、特に運用時における制御には何らかの工夫が必要である。そのための手法として、これまでいくつかの試みが為されてきた。その一例として、以下に示す特許文献１がある。
【０００６】
特許文献１に示されるロギング装置は、アプリケーションログを予め"種別"に分類し、前記種別に依存しない出力（制限）設定、および前記種別単位での出力（制限）設定を設けている。
【特許文献１】特開２００４−０４６７１７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし、上記ロギング装置では、同種別に分類されたログは当該種別に設定されている出力条件下においては一律に出力されてしまい、その中でのログ個々の価値や希少性を見極めることは困難である。
【０００８】
また、種別の分類を、前記ログ個々の価値や希少性に着目し設定したとしても、その設定は経験と勘による部分が多く、また、それ以上に設定者の能力に依存する部分が大きい。さらに、前記設定が実運用時において有効であるか否かの判定も実際の運用を継続する中で見極めていく必要がある。
【０００９】
本発明は、アプリケーションプログラムの処理結果のログ情報のうち、必要なログ情報について出力ファイルに書き出すための仕組みを提供することを目的とする。
【００１０】
また、その他の発明は、必要なログ情報をアプリケーションプログラムの利用期間によって、適宜変更するための仕組みを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明は、アプリケーションプログラム中の命令に従い処理結果のログ情報を出力するログ出力装置であって、前記処理結果のログ情報を出力するためのロギングコードにより出力されたログ情報と、当該ログ情報を一意に識別するための識別コードとを取得するログ情報取得手段と、前記取得手段で取得されたログ情報を、識別コード毎に識別して、各識別コード毎にログ情報に係る管理出力回数を管理する出力回数管理手段と、前記出力回数管理手段により管理される出力回数が所定回数を越えた場合に、当該所定回数を越えた出力回数に係るログ情報をログ出力ファイルとして書き出す書出手段とを有することを特徴とする。
【００１２】
また、前記出力回数管理手段は、識別コード毎に用意されている計数と実際のログ情報の出力回数との積をとることにより得られる管理出力回数を管理することを特徴とする。
【００１３】
また、前記識別コード毎に用意されている計数を、前記アプリケーションプログラムの利用期間に従って変更する計数変更手段を更に有することを特徴とする。
【００１４】
また、所定の種別のログ情報を、書出手段による書き出し処理の対象外と設定する設定手段を更に有することを特徴とする。
【００１５】
また、アプリケーションプログラム中の命令に従い処理結果のログ情報を出力するログ出力装置におけるログ出力方法であって、前記処理結果のログ情報を出力するためのロギングコードにより出力されたログ情報と、当該ログ情報を一意に識別するための識別コードとを取得するログ情報取得ステップと、前記取得ステップで取得されたログ情報を、識別コード毎に識別して、各識別コード毎にログ情報に係る管理出力回数を管理する出力回数管理ステップと、前記出力回数管理ステップで管理される出力回数が所定回数を越えた場合に、当該所定回数を越えた出力回数に係るログ情報をログ出力ファイルとして書き出す書出ステップとを含むことを特徴とする。
【００１６】
また、アプリケーションプログラム中の命令に従い処理結果のログ情報を出力するログ出力装置で読み取り実行可能なログ出力プログラムであって、当該ログ出力装置を、前記処理結果のログ情報を出力するためのロギングコードにより出力されたログ情報と、当該ログ情報を一意に識別するための識別コードとを取得するログ情報取得手段と、前記取得手段で取得されたログ情報を、識別コード毎に識別して、各識別コード毎にログ情報に係る管理出力回数を管理する出力回数管理手段と、前記出力回数管理手段により管理される出力回数が所定回数を越えた場合に、当該所定回数を越えた出力回数に係るログ情報をログ出力ファイルとして書き出す書出手段とをして機能させることを特徴とする。
【発明の効果】
【００１７】
本発明によれば、アプリケーションプログラムの処理結果のログ情報のうち、必要なログ情報について出力ファイルに書き出すことが容易に可能となる。
【００１８】
また、必要なログ情報をアプリケーションプログラムの利用期間によって、適宜変更することができる。
【発明を実施するための最良の形態】
【００１９】
以下では、図面を参照して本発明を実施するための最良の形態について説明する。
【００２０】
〔実施の形態１〕
図１は、本発明の情報処理システムの全体像を示した図であり、パーソナルコンピュータなどの一般的な情報処理装置（１０００）内にて動作する、アプリケーションプログラム（以下、アプリケーションと呼ぶ）（１０１０）を表している。なお、情報処理装置の一般的な構成においては図２を用い、改めて説明する。
【００２１】
図１に示す情報処理装置（１０００）で動作するアプリケーション（１０１０）は、本発明の手順を実施するログ出力装置（以下、ロギング装置）（１３００）を備えている。ロギング装置は、アプリケーション（１０１０）のロギングコードであるログ出力部（１１００）からログ情報の出力要求を受け取る。ログ情報の出力要求は、アプリケーション（１０１０）が処理を行ったときに処理結果をログとして出力するために、ロギング装置（部）（１３００）のログ情報受信部（１３１０）に渡される。
【００２２】
また、情報処理装置（１０００）は、ログ情報（以下、ログデータと呼ぶ）と、後述するログ設定管理テーブル（１３４２）を介して読み書きされるテーブルデータ（１４１０）とを永続的に保持可能な外部記憶装置（１４００）を備えている。
【００２３】
ロギング装置（１３００）は、ログ出力部（１１００）からのログ情報出力要求を受け付けるログ情報受信部（１３１０）、ログ出力に関する情報を管理するログ出力情報管理部（１３４０）、ログ出力情報管理部（１３４０）への問い合わせによって、ログ情報受信部（１３１０）にて受け付けたログ上情報の出力可否を制御するログ出力判定部（１３２０）、ログ出力判定部に（１３２０）にて出力可として判定されたログ情報を、外部記憶装置（１４００）へ出力するログ出力部（１３３０）を備えている。また、ロギングコードは、例えばログ出力要求部（１１００）として説明したが、ログ出力要求部は単に要求のみ行い、ログ情報の生成自体は、ログ出力判定部（１３２０）が行ってもよい。
【００２４】
この場合、ロギングコードは、ログ出力判定部（１３２０）のプログラムコード中に記述されていることになる。また、ロギングコード自体に、ログ情報の種別を示す識別コードを記述しておき、生成されるログ情報に識別情報を含ませてもよいし、また、ロギングコード自体には、識別コードを含めず、ログ出力要求部からの要求に従って、テーブルデータ１４１０に記述されている要求元のアプリケーションのモジュール（関数）に従って特定される識別コードをログ情報に含ませることにより実現してもよい。
【００２５】
ログ出力情報管理部（１３４０）は、ログ情報の出力可否に関する情報を任意に設定可能なログ出力設定部（１３４１）と、出力設定情報を管理することを目的としたログ設定管理テーブル（１３４２）とを備えている。
【００２６】
外部記憶装置（１４００）は、具体的には、ログ出力部（１３３０）によって出力されたログ情報であるログデータ（１４２０）およびログ設定管理テーブル（１３４２）を介して読み書きされるテーブルデータ（１４１０）を永続的に記憶することを目的としている。
【００２７】
なお、本発明におけるロギング装置（１３００）について、ここでは一般的な情報処理装置上でソフトウェアを想定して説明を行ったが、ASICやFPGAなどのハードウェアで実現されてもよい。また、アプリケーション（１３００）、外部記憶装置（１４００）も含め、単一、あるいは複数のハードウェア上のいずれで稼働しても構わない。
【００２８】
本発明でのロギングにおける着眼点は、個々のログに対する出力頻度である。
【００２９】
アプリケーションプログラムコード内に配置された処理結果のログを出力するための命令であるロギングコードそれぞれに、一意の識別子（ロケーション情報）を設定する。そして、各ロギングコードに対し、ロケーション情報、出力内容、出力回数、出力上限値の各情報について管理する。
【００３０】
このロギング情報は、ロケーション情報および出力内容によって、一意に識別が可能である。出力回数とは、ロケーション情報および出力内容によって一意に識別されたロギング情報の、通算出力回数であり、出力上限値に達するまでカウントアップ、すなわち当該ロギングコードの出力が継続される。
【００３１】
つまり、同ロギングコードに対し、同内容の出力が何回以上出力されたかが、本発明におけるログ情報の出力条件となる。なお、出力上限値はロケーション情報ごとであっても、ロギング装置全体であっても構わない（その設定粒度を問わない）。
【００３２】
では、続いて本発明を実現する構成で、前述にもある、一般的な情報処理装置、すなわちパーソナルコンピュータとソフトウェアの組み合わせの場合について、図２を用いて説明する。
【００３３】
図２は、本発明のロギング装置を実現可能な一般的な情報処理装置の内部構成を示したものである。
【００３４】
図２において、２００は情報処理装置全体である。情報処理装置（２００）は、ＲＯＭ（２０２）あるいは例えばハードディスクなどの大規模記憶装置、HDD（２０１）に記憶されたソフトウェアを実行するＣＰＵ（２０１）を備え、ＣＰＵ（２０１）はシステムバス（２１３）に接続される各デバイスを総括的に制御する。
【００３５】
ＨＤＤ（２１０）は外部記憶装置（１４００）として利用してもよい。
【００３６】
ＲＡＭ（２０３）は、ＣＰＵ（２０１）の主メモリ、ワークエリア等として機能する。外部入力コントローラ（Input Dev C（２０５））は、情報処理装置に備えられたキーボードあるいはマウスなどで構成される入力部（２０６）等からの指示入力を制御する。ディスプレイコントローラ（Display C（２０７））は、例えば液晶ディスプレイなどで構成される表示モジュール（Display（２０８））の表示を制御する。
【００３７】
ネットワークインタフェースカード（ＮＩＣ（２０４））は、Network（２１４）を介して、他のネットワーク機器あるいはファイルサーバ等と双方向にデータをやりとりする。前述の外部記憶装置（１４００）あるいはその一部が本Network（２１４）上に接続された外部装置である場合は、テーブルデータ（１４１０）あるいは、およびログデータ（１４２０）もその対象に含まれることは言うまでもない。
【００３８】
なお、HDD（２１０）は、場合によっては処理過程における情報の一時記憶場所としても使われることがある。
【００３９】
以下、ログ設定管理テーブル（１３４２）にて保持される、ログ出力設定データおよびログデータイメージの一例を、図３および図４に示す。
【００４０】
図３は任意のログ情報の出力設定テーブルの一例である。出力上限値管理テーブル（３１０）はログ情報の出力数の上限値である、出力上限値（３１１）を保持することが可能である。
【００４１】
出力値係数テーブル（３２０）は出力上限値管理テーブル（３１０）にて管理される出力上限値に対し、ログ種別ごとに重み付けを行うための情報を保持している。ここで、ログ種別とは、任意のログに対し、ユーザ（プログラム開発者）がたとえばログの特性（システム、セキュリティ、デバッグ等）に応じ当該ログを区分する値をさす。
【００４２】
なお、本ログ種別については、後ほど図６を用いてログ種別ごとの具体的なメッセージの例を挙げながら簡単に説明する。
【００４３】
出力係数テーブルは（３２０）は、ログ種別（３２１）、ログ種別の名称である名称（３２２）および係数（３２３）から構成され、ログ種別（３２１）ごとに係数（３２３）を管理する。なお、ここでは３２０テーブル情報に具体性を持たせるために名称（３２２）項を設けているが、本発明において必須の項目ではない。
【００４４】
具体的には、ログ出力数の上限値は、出力上限値管理テーブル（３１０）の出力上限値（３１１）にて保持されている値で制御されるが、出力値係数テーブル（３２０）にて保持されているログ種別（３２１）に該当するログ種別に区分されるログに関しては、出力上限値（３１１）にて保持されている値に、係数（３２３）の当該係数値を乗じたものを、当該ログの出力上限値とする。
【００４５】
では、続いて上限値設定を計数化することによる効果について説明する。
【００４６】
まず、説明に当たり、ログ種別（３２１）ごとのログメッセージの一例として、図６を用いて具体化しておく。
【００４７】
図６はログ種別（３２１）の例として、システム、セキュリティおよびデバッグをそれぞれ想定したものである。６１０はシステムログに区分されるメッセージであり、アプリケーションのインストール、アンインストール、起動あるいは停止等、システムの状態に変化が生じたことを識別するデータとして有用である。
【００４８】
６２０はセキュリティログに区分されるメッセージであり、ユーザのログイン、ログアウトや任意のデータへのアクセス履歴等、システム監査データとして有用である。６３０はデバッグログに区分されるメッセージであり、システム運用上において、プログラムコード内、任意のクラスメソッドの呼び出しを記録するものである。デバッグメッセージには、当該メソッド呼び出し時の変数値も動的に含むことが可能であるため、アプリケーションプログラムの動作を把握するデータとして有用である。
【００４９】
以上のように、あるログ種別（システム、セキュリティ、デバッグ）を想定し、その具体例を述べ、その有用性に触れたが、有用性はシステムの運用状態あるいは環境において、かなりの幅を持っている。
【００５０】
たとえばセキュリティログは、主に機密情報を扱う企業での運用においては非常に重要であり、逆に機密情報を扱わない（運用上、ユーザ認証等を必要としない）企業においては軽視できる情報である。
【００５１】
この場合、前者の企業であればログ種別（３２１）がセキュリティに該当する係数（３２３）を大きく設定することでセキュリティログの出力が充実し、逆に後者の企業であれば同係数（３２３）を小さく設定することで、セキュリティログの出力を抑制し、ＣＰＵ（２０１）やＨＤＤ（２１０）等のリソース消費を抑えることが可能である。
【００５２】
また例えばデバッグログは、システム（アプリケーションプログラム）の運用開始時には特に重要であり、その後、三ヶ月、一年と運用を継続する、つまり安定稼動に近づくにつれ、その重要性は薄れていく。
【００５３】
つまりログ種別（３２１）がデバッグに該当する係数（３２３）について、運用開始時は大きく設定しておき、時間経過とともに同係数を徐々に小さくしていくという制御が可能である。
【００５４】
なお、係数値の制御においては、後述する図４のログ情報管理テーブルを参照することでユーザが任意に行ってもよいし、不図示ではあるが、一定の時間経過によって当該係数値の増減を、ＣＰＵ（２０１）による制御を可能とするための情報を管理する、計数管理テーブルを定義してもよい。
【００５５】
なお、前記テーブルの設定値は、アプリケーションプログラムを入れ替えるタイミングで、適切に見直す必要があることはいうまでもない。
【００５６】
図４は個々のログ情報に関する情報を管理する、ログ情報管理テーブルの一例である。
【００５７】
ログ情報管理テーブル（４００）は、プログラムソースコード上に配置されたログ出力コードの位置を示すロケーション情報（４０１）、ログ種別（３２１）においても説明した、当該ログの種別を示すログ種別（４０２）、当該ログメッセージの一意性について判定するための情報であるログメッセージ情報（４０３）、当該ログメッセージの出力回数を示す出力回数（４０４）および当該ログメッセージの出力日時である最終出力日時（４０５）から構成されている。
【００５８】
なお、ロケーション情報（４０１）の詳細については後述する。
【００５９】
ここで、ログメッセージ情報（４０３）について、さらに詳しく説明する。プログラムソースコード上に任意に配置されたログ出力コードはロケーション情報（４０１）にて一意に識別可能である。情報（４０１）に加え、本ログメッセージ情報（４０３）を持たせた意図は、たとえば当該ログメッセージの出力コードが、任意の文字列のみ、つまりリテラルのみで構成されているのであれば、ロケーション情報（４０１）のみでログメッセージを識別可能である。
【００６０】
しかし、ログ出力コードにて、デバッグログメッセージの例（６３０）でも示すように、たとえば変数の値を参照するような実装がなされている場合、前記ロケーション情報（４０１）のみでログメッセージの一意性をあらわすことは不可能である。
【００６１】
すなわち、変数の値によって、ログメッセージが異なり、それはプログラムコード実行手順にも違いが生じる可能性を示唆する。そこで本情報（４０３）をロケーション情報（４０１）と対で管理することにより、ログメッセージの一意性を保証するのである。
【００６２】
また、前記原理を応用し、前記セキュリティログメッセージの例（６２０）で示すように、メッセージに時刻（本例では時間単位）を含むことで、出力ログメッセージを当該発生時刻ごとの区別することが可能になる。前記区別は、例えば通常であれば１２時台に行われるログイン処理が、ある日に限っては１７時台に行われているといった希な状態を、ログメッセージから容易に検出することを可能にする。すなわちログメッセージの出力制御によって、前記希少ログメッセージが顕著になるのである。前記ログメッセージの出力制御手順においては、後ほどフローチャートを用いて詳しく説明する。
【００６３】
なお、本情報（４０３）はログメッセージそのものでもかまわないが、たとえばFPGA等のハードウェアを利用するなど、高速なダイジェスト処理が実現できるのであれば、４０３の具体値として図示しているような、当該ログメッセージのハッシュ値を本情報として格納することが望ましい。
【００６４】
以上、図３および図４を用いたテーブルは、前述のとおり、前記ログ設定管理テーブル（１３４２）にて管理されており、出力上限値管理テーブル（３１０）および出力値係数テーブル（３２０）はログ出力設定部（１３４１）にて当該情報を更新される。
【００６５】
また、前記テーブル３１０、３２０および、ログ情報管理テーブル（４００）はログ出力判定時に、前記ログ出力判定部（１３２０）によって当該情報を参照され、前記判定が出力可能であった場合、前記ログ出力判定部（１３２０）はログ情報管理テーブル（４００）の当該ログ情報について、その値を更新する。
【００６６】
なお、前記更新対象の値は、図４においては出力回数（４０５）および最終出力日時（４０６）である。
【００６７】
続いて、ロケーション情報（４０１）の詳細について説明する。
【００６８】
ロケーション情報とは、任意のロギングコードを特定する情報であることは前述のとおり。
【００６９】
前記、ロケーション情報の一例として、たとえば、プログラムコード内に当該ロギングコードを実装する関数名、および前記関数を実装するクラス名が考えられる。プログラミング言語であるＪａｖａ(登録商標)やＣ＃等で定義される前記クラス名称は、パッケージや名前空間（ネームスペース）によって、通常一意に識別可能なように定義される。
【００７０】
また、当該クラス内に定義されるメソッド名は、当該クラス内において、その一意性が確保される。すなわち、前記クラス名およびメソッド名の組み合わせ、および前記ログメッセージ情報（４０３）とで、当該ログメッセージを特定することは十分可能である。
【００７１】
また、前記ロギングコードを含む、クラスおよびメソッド名の特定においては、たとえばアプリケーションプログラム（１０１０）の利用するコールスタック内の情報にアクセスする方法が考えられる。前記コールスタックは、アプリケーションプログラムの実行時において、通常ＲＡＭ（２０３）内に設けられる領域である。
【００７２】
任意のメソッド呼び出しのたび、メソッド情報はスタックフレームと呼ばれる形式で、前記コールスタック上に格納され、当該メソッドの呼び出しが終了するタイミングで前記コールスタック上から削除される。すなわち、ログ情報受信部（１３１０）は、ログメッセージとともに、前記コールスタックより当該ロギングコードのクラス名およびメソッド名を取得し、ロケーション情報とすることが可能である。
【００７３】
なお、前記ロケーション情報はアプリケーション（１０１０）で示すように、ロギング装置（１３００）と同一プロセス内にて動作する場合においては、前記ロギング装置（１３００）は当該コールスタックより前記情報（クラス名、メソッド名）を直接取得可能であるが、ログ出力部（１１００）を持つプログラムがロギング装置（１３００）と別プロセスにて動作する場合を含め、ログ情報受信部（１３１０）は、前記情報（クラス名、メソッド名）値をログ出力部（１１００）から取得しても構わない。
【００７４】
図５は、ロギングにおける出力制御に関するフローチャートである。なお、ここでは前記、ログ出力部（１１００）を持つアプリケーション（１０１０）およびロギング装置（１３００）が同一プロセス内にて動作、すなわち同一のアプリケーションプログラムであるものとして説明する。
【００７５】
図５に示すフローチャートは、アプリケーション（１０１０）内、任意のロギングコードによって呼び出される。
【００７６】
ステップＳ５０１では、ＣＰＵ（２０１）は、アプリケーション（１０１０）内、ロギングコードより当該ログメッセージに関する、ログ種別およびログメッセージを取得するよう制御する。
【００７７】
ステップＳ５０２では、ＣＰＵ（２０１）は、前記ステップＳ５０１の呼び出しにおいて生成されたＲＡＭ（２０３）内、前記コールスタックより、当該ロギングコードを含むクラス名およびメソッド名を取得し、ロケーション情報（４０１）を生成するよう制御する。
【００７８】
ステップＳ５０３では、ＣＰＵ（２０１）は、前記ステップＳ５０１において取得したログメッセージより、ログメッセージ情報（４０３）を生成するよう制御する。
【００７９】
前記ステップＳ５０１ないしステップＳ５０３はログ情報受信部（１３１０）にて行われる。
【００８０】
続いて、ステップＳ５０４では、ＣＰＵ（２０１）は、出力上限値（３１１）に、前記ステップＳ５０１で取得したログ種別にひもづいた係数（３２２）を乗じることで、当該ログ種別の出力上限値Ｎを取得するよう制御する。なお、前記係数は、アプリケーション（１０１０）の動作環境、条件等によってその値が動的に変更可能であることは前述のとおりである。
【００８１】
ステップＳ５０５では、ＣＰＵ（２０１）は、前記ステップＳ５０１ないしステップＳ５０３の過程において取得、生成した、ロケーション情報（４０１）、ログ種別（４０２）およびログメッセージ情報（４０３）より、当該出力回数（４０４）を取得するよう制御する。
【００８２】
ステップＳ５０６では、ＣＰＵ（２０１）は、前記ステップＳ５０４ないしステップＳ５０５において取得した、ログ種別出力上限値：Ｎおよび当該出力回数値を比較し、前記出力回数値が前記ログ種別出力上限値：Ｎ未満である場合は、後述ステップＳ５０７へ、それ以外の場合は本フローチャートにおける処理を終了するよう制御する。
【００８３】
前記ステップＳ５０４ないしステップ５０６はログ出力判定部（１３２０）にて行われる。
【００８４】
ステップＳ５０７は、前記ステップＳ５０６において、前記出力回数値が前記ログ種別出力上限値：Ｎ未満であると制御された場合に続く処理である。
【００８５】
ステップＳ５０７では、ＣＰＵ（２０１）は、ステップＳ５０１において取得したログメッセージをログデータ（１４２０）として、外部記憶装置（１４００）に記録するよう制御する。
【００８６】
ステップＳ５０８では、ＣＰＵ（２０１）は、ログ情報管理テーブル（４００）に当該ログ情報レコードが存在するか否かを判定するよう制御する。前記ステップS５０８にてログ情報レコードが存在すると判定した場合は、後述のステップS５０９へ、そうでない場合、つまり新規ログ情報であると判定して場合は、後述のステップS５１０へ進む。
【００８７】
ステップS５０９では、ＣＰＵ（２０１）は、前記ステップＳ５０５において取得した出力回数値に１を加えた値を、前記ステップＳ５０１ないしステップＳ５０３の過程において取得、生成した、ロケーション情報（４０１）、ログ種別（４０２）およびログメッセージ情報（４０３）より識別可能な出力回数値として更新するよう制御する。
【００８８】
また、併せて前記更新出力回数にひもづく最終出力日時（４０５）における値も、当該日時で更新するよう制御する。
【００８９】
ステップS５１０では、ＣＰＵ（２０１）は、当該ログ情報に関する新規レコードとして、ログ情報管理テーブル（４００）における４０１ないし４０５の各項目を登録するよう制御する。なおこの際出力回数（４０４）には値、１が登録されることは言うまでもない。
【００９０】
前記ステップS５０７ないしS５１０ログ出力部（１３３０）にて行われる。
【００９１】
では続いて、前記図５を用いて説明した処理によって出力された実際のログデータ（１４２０）イメージの例を図７に示す。
【００９２】
二つのログデータ（７１０および７２０）は、ログ種別（３２１）デバッグに分類されるデータ（６３０）として、ログ出力開始、すなわちアプリケーション（１０１０）の運用開始から一定期間蓄積された状態を示している。具体的には任意のログメッセージが出力された日時を示す７１１項および７２１項、実際のメッセージである７１２項および７２２項から構成されている。
【００９３】
なお、本ログメッセージの各出力項目を含む構成は、出力アプリケーションによって任意であることは言うまでもない。
【００９４】
本図において、ログデータ（７１０）は本発明における出力制御を行っていないデータ、またログデータ（７２０）は前記出力制御を行っているデータの例を示している。
【００９５】
ログデータ（７１０）においては、前述のとおり、ＣＰＵ（２０１）はログメッセージに関する出力制限制御を行っていない。そのため、運用開始時ログメッセージ（７１３）であっても、一定期間経過後のログメッセージ（７１４）であっても、当該アプリケーションからのログ出力要求を受け、同様のメッセージであっても延々と出力し続ける。
【００９６】
かわって、ログデータ（７２０）においては、前述のとおり、ＣＰＵ（２０１）は、本発明によりログメッセージの出力制限制御を行っている。ログ出力開始時（７２３）においては、ＣＰＵ（２０１）は、前記ステップＳ５０４ないしステップＳ５０６の処理において、出力回数がログ種別出力上限値未満と判定し、ステップＳ５０７ないしステップＳ５１０の処理を行うよう制御する。
【００９７】
すなわち、ログメッセージの外部記憶装置（１４００）への出力（Ｓ５０７）とログ情報管理テーブル４００への新規ログ情報レコード登録（Ｓ５１０）、あるいは出力回数（４０４）値のカウントアップ（Ｓ５０９）処理である。
【００９８】
しかし、時間が経過する、つまり出力回数（４０４）のカウントアップが進むにつれ、ＣＰＵ（２０１）はステップＳ５０６にて出力回数がログ種別出力上限値以上と判定するログメッセージを検出するようになる。
【００９９】
すなわち、ステップＳ５０６にてロギング処理を終了し、ログデータ（１４２０）として外部記憶装置（１４００）上に出力されないログメッセージが出現する。前記出力されないログメッセージとは、言い換えれば、すでに十分出力された、安定したプログラムコード上から要求されるログメッセージであり、システム的には価値の低くなったログメッセージであるといえる。
【０１００】
よって、アプリケーション（１０１０）の運用開始から、一定時間の経過後には、前記価値の低くなったログメッセージは前述したとおりログデータ（１４２０）へは非出力となり、一定期間経過後のログメッセージ（７２４）に示すよう、ログメッセージとしての出力価値の高いメッセージのみが絞り込まれた形でデータとして保持されていく。
【０１０１】
このように、価値の低いメッセージを出さないように、ログ設定管理テーブル（１３４３）は、計数（３２３）を大きく書き換える機能を持たせている。また、ログ設定管理テーブル（１３４２）は、出力上限値（３１１）を、アプリケーションプログラムの利用期間が経過するとともに、大きく書き換える機能を持たせてもよい。
【０１０２】
また、ログ設定管理テーブル（１３４２）は、アプリケーションプログラムの利用期間が経過するとともに、ログ情報中の最終出力日時（４０５）が一定以上前のものについては破棄することにより出力回数を減算したり、リセットしたりしてもよい。
【０１０３】
このように、本実施例では、アプリケーションプログラム中の命令に従い処理結果のログ情報を出力するログ出力装置において、処理結果のログ情報を出力するためのロギングコードにより出力されたログ情報と、このログ情報を一意に識別するための識別コードとを取得するログ情報取得部（ログ出力判定部１３２０）を備えている。
【０１０４】
そして、取得されたログ情報を、識別コード毎に識別して、各識別コード毎にログ情報に係る管理出力回数を管理する出力回数管理手段（ログ出力情報管理部１３４０）と、ここで管理される出力回数が所定回数を越えた場合に、当該所定回数を越えた出力回数に係るログ情報をログ出力ファイルとして書き出す書出手段（ログ出力部１３３０）を備えている。
【０１０５】
この構成により、アプリケーションプログラムの処理結果のログ情報のうち、不要なログ情報のファイル書き出しを行うことなく、必要なログ情報についてのみ出力ファイルに書き出すことが可能となる。
【０１０６】
また、本実施例では識別コード毎に用意されている計数と実際のログ情報の出力回数との積をとることにより得られる管理出力回数を管理している。
【０１０７】
これにより、ログ種別により、ファイル書き出しを行うか否かを出力回数に乗算する計数により適宜変更することができるので、単に処理回数が多いログばかりが出力されることを防止することが可能となる。
【０１０８】
また、識別コード毎に用意されている計数を、アプリケーションプログラムの利用期間に従って変更する計数変更手段（ログ設定管理テーブル部１３４２）を備えている。
【０１０９】
これにより、アプリケーションプログラムの利用期間に従って、例えば、利用期間が長くなれば安定利用されているとして、ログ情報のファイル書き込みをする閾値を大きくしたり、もしくは計数を大きくしたりして、ログ情報のファイル書き込みを減らすことが可能となり、無駄なログ出力が減る。
【０１１０】
〔実施の形態２〕
上述した実施の形態１は、アプリケーション（１０１０）からの出力要求ログメッセージすべてに対しログ種別（３２１）による出力制限制御を行うものである。
【０１１１】
しかし、運用環境におけるシステム管理者やアプリケーション開発者にとっては、出力制限を受けない、すなわちいかなる場合であっても必ず出力されることを期待するログメッセージも存在する。
【０１１２】
本実施の形態２においては、出力制限を受けないログメッセージ出力の制御方法について、実施の形態１と同じく、図を用いて説明する。なお、説明に当たっては、実施例１からの差分を中心に行い、また必要に応じて、実施の形態１で用いた図を参照するものとする。
【０１１３】
本実施例においては、実施の形態１におけるログ出力制限の対象外ログメッセージを規定する手段として、ログメッセージに重要度を持たせる、ログレベルを定義する。
【０１１４】
図８は、ログレベルに関する情報管理テーブルの例である。
【０１１５】
ログレベル管理テーブル（８１０）は、アプリケーション（１０１０）より要求されるログメッセージそれぞれに指定可能なログレベル情報を管理する。ログレベル（８１１）として複数の値を定義し、それぞれの定義値の意味が容易に想定できるよう、名称（８１２）を設けている。
【０１１６】
なお、本図で示すログレベルは名称（８１２）からも明らかなように、主にアプリケーション開発者視点における定義を想定している。ログレベル出力管理テーブル（８２１）は、実施の形態１における出力制限を受けないログメッセージを定義する。
【０１１７】
具体的には、無条件出力（８２１）項に、出力制限対象外とするログレベル（８１１）を指定する。すなわち、本テーブル（８２０）にて保持しているログレベル（８１１）を持つログメッセージは、実施例１にも示す、ログ出力制限の制御を受けることなく、無条件にログデータ（１４２０）として、外部記憶装置（１４００）に出力される。  なお、本実施の形態２に示す制御を有効化するため、アプリケーション（１０１０）が生成するログメッセージ出力要求には、実施の形態１の情報に加え、前記ログレベル（８１１）が含まれていることは言うまでもない。
【０１１８】
続いて、本実施の形態２に関する処理を、前述の通り、実施の形態１からの差分としてフローチャートを用いて説明する。
【０１１９】
図９はログレベル（８１１）を加えた、ログ出力制限制御のフローチャートである。
【０１２０】
なお、本フローチャートによる制御は、図５に示すフローチャートと同様アプリケーション（１０１０）内、ログ出力部（１１００）からのログ出力要求によって呼び出されるものであり、ロギング装置（１３００）内にて行われるものである。
【０１２１】
ステップＳ９０１では、ＣＰＵ（２０１）は、アプリケーション（１０１０）内、ロギングコードより当該ログメッセージに関する、ログ種別、ログメッセージおよびログレベルを取得するよう制御する。
【０１２２】
ステップＳ９０２では、ＣＰＵ（２０１）は、ログレベル出力管理テーブル（８２０）を参照し、前記ステップＳ９０１において取得したログレベルが含まれているか否かを判定するよう制御する。
【０１２３】
また、ＣＰＵ（２０１）は、前記判定において含まれていないと判定した場合は、出力制御対象ログメッセージとして、後述ステップＳ９０３へ、含まれていると判定した場合は、無条件出力ログメッセージとして、後述ステップＳ９０４へと進むよう制御する。
【０１２４】
ステップＳ９０３は、前記ステップＳ９０２において出力制御対象ログメッセージと判定された場合に続く処理である。
【０１２５】
ステップＳ９０３では、ＣＰＵ（２０１）は、前記ステップＳ９０１において取得したログ情報に関し、出力制限制御を行うよう制御する。
【０１２６】
なお、本ステップにおける制御の詳細は、前記ステップＳ５０２ないしステップＳ５１０における処理である。
【０１２７】
ステップＳ９０４は、前記ステップＳ９０２において無条件出力ログメッセージと判定された場合に続く処理である。
【０１２８】
ステップＳ９０４では、ＣＰＵ（２０１）は、ステップＳ９０１にて取得したログメッセージをログデータ（１４２０）として、外部記憶装置（１４００）に記録するよう制御する。
【０１２９】
なお、本制御は前記ステップＳ５０７と同様の制御であることは言うまでもない。
【０１３０】
本実施の形態では、所定の種別のログ情報を、管理出力回数の値を条件とする書き出し処理の対象外として、書出手段により書き出し処理の対象と設定する設定手段（ログ出力設定部１３４１）を更に有している。
【０１３１】
これにより、出力制限を受けないログメッセージ出力を適宜設定することが可能となる。
【０１３２】
以上、実施形態例を詳述したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能であり、具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【０１３３】
以上説明したように、本実施例では、アプリケーションプログラムコード内に、処理結果のログ情報を出力する際にログ情報を一意に識別可能な識別子を設定するようにログ出力コードを用意し、ログ情報の出力回数を管理している。これにより、運用上において十分に出力されたログ情報、つまり安定ロジックに関するログ情報の出力を制限することが可能になる。
【０１３４】
また、出力内容を前記識別子と併せて管理することで、同ログ出力コード（ロギングコード）から生成されたログ情報であっても、当該部分のインプットおよび、あるいはアウトプット情報や動作条件によってログ情報の出力可否を判定することが可能である。
【０１３５】
また、出力回数による、ログ上の出力制御において、制限値（出力回数）に関する情報を係数化することで、例えば予め個々のログ情報に、その価値に対する重み付けを行い、同システムの中においても、ログ情報によっては出力回数に幅を持たせることも可能である。
【図面の簡単な説明】
【０１３６】
【図１】情報処理装置の全体像を示す図である。
【図２】一般的な情報処理装置の内部構造を示す図である。
【図３】ログ出力設定に関する情報テーブルの一例を示す図である。
【図４】個々のログに関する情報を管理するテーブルの一例を示す図である。
【図５】ログ出力制御処理の一例を示すフローチャートである。
【図６】ログメッセージの一例を示す図である。
【図７】外部記憶装置に出力されたログメッセージの一例を示す図である。
【図８】ログレベル制御に関する情報テーブルの一例を示す図である。
【図９】ログ出力制御処理の一例を示すフローチャートである。
【符号の説明】
【０１３７】
１１００  ログ出力部
１３００  ロギング装置（部）
１３１０  ログ情報受信部
１３２０  ログ出力判定部
１３４０  ログ出力情報管理部
２０１  ＣＰＵ
２０３  ＲＡＭ
２１０  ＨＤＤ
３１０  出力上限値管理テーブル
３２０  出力値係数テーブル
４００  ログ情報管理テーブル
４０１  ロケーション情報
４０４  出力回数
S５０２  ロケーション情報生成ステップ
S５０４  ログ出力上限値取得ステップ
S５０６  ログ出力判定ステップ
S５０７  ログ、外部記憶装置出力ステップ
６１０  システムログメッセージイメージ
６２０  セキュリティログメッセージイメージ
６３０  デバッグログメッセージイメージ
７１０  出力非制限ログイメージ（デバッグログ）
７２０  出力制限ログイメージ（デバッグログ）
８１０  ログレベル管理テーブル
８２０  ログレベル出力管理テーブル
Ｓ９０２  ログレベル出力判定ステップ
【図１】
2009163305.tif 000003
【図２】
2009163305.tif 000004
【図３】
2009163305.tif 000005
【図４】
2009163305.tif 000006
【図５】
2009163305.tif 000007
【図６】
2009163305.tif 000008
【図７】
2009163305.tif 000009
【図８】
2009163305.tif 000010
【図９】
2009163305.tif 000011