(57)【要約】【課題】正常終了した処理に係るログ情報であれば、正常終了した旨の記述がないログ情報であってもログバッファから削除できるようにする。【解決手段】バッファ最適化処理部１０２は、例えば、定期的に、ログバッファ１０１に記録されている注目ログ情報よりも記録時期が新しいログ情報の中に、上記注目ログ情報とプログラムの構造に基づいて定まる関係性を有し、上記注目ログ情報を正常終了した処理に係るログ情報と見做すことができるログ情報が存在するか否かを判定する。そして、そのようなログ情報が存在場合は上記注目ログ情報をログバッファ１０１から削除する。【選択図】図９
2014164464.tif 000002
【特許請求の範囲】
【請求項１】
ログバッファと、
プログラムを実行し、該プログラムから出力されるログ情報を前記ログバッファに記録するプログラム実行部と、
前記ログバッファに記録されている注目ログ情報よりも記録時期が新しいログ情報の中に、前記注目ログ情報とプログラムの構造に基づいて定まる関係性を有し、前記注目ログ情報を正常終了した処理に係るログ情報と見做すことができるログ情報が存在するか否かを判定し、存在する場合は前記注目ログ情報を前記ログバッファから削除するバッファ最適化処理部とを備えることを特徴とするログ出力装置。
【請求項２】
請求項１記載のログ出力装置において、
前記正常終了した処理は、ループ処理の一部の処理であり、
前記関係性は、前記注目ログ情報に含まれているメッセージとの一致度が閾値以上のメッセージを含むことであるログ出力装置。
【請求項３】
請求項１記載のログ出力装置において、
前記正常終了した処理は、ループ処理の一部の処理であり、
前記関係性は、前記注目ログ情報に含まれているクラス名、関数名および行数と同一のクラス名、関数名および行数を含むことであるログ出力装置。
【請求項４】
請求項１記載のログ出力装置において、
前記正常終了した処理は、呼び出し先の関数によって行われた処理であり、
前記関係性は、前記注目ログ情報に含まれているクラス名および関数名と異なるクラス名および関数名を含むログ情報が存在し、且つ該ログ情報よりも記録時期が古いログ情報の中に該ログ情報と同一のクラス名および関数名を含むログ情報が存在することであるログ出力装置。
【請求項５】
請求項１乃至３の何れか１項に記載のログ出力装置において、
前記バッファ最適化処理部は、定期的に前記注目ログ情報を正常終了した処理に係るログ情報と見做すことができるログ情報が存在するか否かを判定し、存在する場合は前記注目ログ情報の廃棄ポイントに、前記注目ログ情報のログレベルに応じた加算ポイントを加算し、廃棄ポイントが廃棄用閾値以上のログ情報を前記ログバッファから削除することを特徴とするログ出力装置。
【請求項６】
ログバッファと、プログラム実行部と、バッファ最適化処理部とを備えたコンピュータが実行するログ出力方法であって、
前記プログラム実行部が、プログラムを実行し、該プログラムから出力されるログ情報を前記ログバッファに記録し、
前記バッファ最適化処理部が、前記ログバッファに記録されている注目ログ情報よりも記録時期が新しいログ情報の中に、前記注目ログ情報とプログラムの構造に基づいて定まる関係性を有し、前記注目ログ情報を正常終了した処理に係るログ情報と見做すことができるログ情報が存在するか否かを判定し、存在する場合は前記注目ログ情報を前記ログバッファから削除することを特徴とするログ出力方法。
【請求項７】
ログバッファを備えたコンピュータを、
プログラムを実行し、該プログラムから出力されるログ情報を前記ログバッファに記録するプログラム実行部、
前記ログバッファに記録されている注目ログ情報よりも記録時期が新しいログ情報の中に、前記注目ログ情報とプログラムの構造に基づいて定まる関係性を有し、前記注目ログ情報を正常終了した処理に係るログ情報と見做すことができるログ情報が存在するか否かを判定し、存在する場合は前記注目ログ情報を前記ログバッファから削除するバッファ最適化処理部として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ログ情報を出力するログ出力装置に関する。
【背景技術】
【０００２】
プログラム全般の話として、障害発生時の原因特定のために、処理内容（ログ情報）をファイルに逐次出力するログ出力機能が一般的に存在する。ログ情報は処理内容に応じて、致命的（FATAL）、エラー（ERROR）、警告（WARN）、情報（INFO）、デバッグ（DEBUG）、追跡（TRACE）といったレベルに分類される。そして、正常運用時は、INFOレベル以上の重要なログ（FATAL/ERROR/WARN/INFO）のみファイルに出力して、詳細な処理内容を記したログ（DEBUG/TRACE）については、以下のような理由から出力しない事が一般的であった。
【０００３】
・ログファイルのサイズが大きくなる。
・ログ情報が膨大な量となり、障害の原因解析が困難になる。
・ファイル入出力回数が増え、プログラム性能が劣化する。
【０００４】
しかし、重要なログ情報のみをログファイルに出力した場合には、詳細なログ情報を得られないため、障害原因を特定できない場合がある。
【０００５】
そこで、このような問題点を解決するため、次のような技術が提案されている（例えば、特許文献１参照）。特許文献１では、プログラムプロセスから出力されたログ情報のレベルが予め定められた閾値レベル以上である場合は、そのログ情報をログファイルとログバッファとの両方に出力し、閾値レベル未満である場合は、ログバッファのみに出力する。これにより、ログファイルには、レベルの高い重要なログ情報のみが記録され、ログバッファには全てのレベルの詳細なログ情報が記録される。そして、プログラムプロセスから異常を示すログ情報が出力された場合には、ログバッファに記録されている詳細なログ情報を障害発生時ログファイルに出力する。
【０００６】
この特許文献１に記載されている技術によれば、重要なログ情報のみをログファイルに出力する場合に比較して、障害原因を特定できないケースを減少させることができる。しかし、特許文献１に記載されている技術は、限られたサイズのログバッファにログ情報を記録するようにしているので、障害の原因解析に必要なるログ情報が上書きされ、消えてしまう危険性がある。
【０００７】
また、上述したような危険性を少なくするため、ログバッファに記録されているログ情報の内の、正常終了したイベントに関連するログ情報を削除するようにした技術も提案されている（例えば、特許文献２参照）。特許文献２では、ログバッファに記録されているログ情報の中に、正常終了を明示的に示すログ情報があれば、そのログ情報と、そのログ情報と関連するログ情報とを削除するようにしている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００４−１３９４８３号公報
【特許文献２】特開２００７−２４１５４０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献２に記載されている技術によれば、障害の原因解析に必要なログ情報が上書きによって消されてしまう危険性を少なくすることができる。しかし、特許文献２に記載されている技術では、正常終了を明示的に示すログ情報に基づいてイベントが正常終了したことを認識している。このため、明示的に正常終了を示すログ情報以外は、たとえ正常終了した処理に係るログ情報があったとしても削除できなかった。このため、ログバッファ上から正常終了した処理に係るログ情報を削除する処理が促進されず、障害の原因解析に必要なログ情報が上書きによって消されてしまうという危険性があった。
【００１０】
［発明の目的］
そこで、本発明の目的は、正常終了した旨の記述がないログ情報は、たとえ正常終了した処理に係るログ情報であったとしても削除できない、という課題を解決したログ出力装置を提供することにある。
【課題を解決するための手段】
【００１１】
本発明に係るログ出力装置は、
ログバッファと、
プログラムを実行し、該プログラムから出力されるログ情報を前記ログバッファに記録するプログラム実行部と、
前記ログバッファに記録されている注目ログ情報よりも記録時期が新しいログ情報の中に、前記注目ログ情報とプログラムの構造に基づいて定まる関係性を有し、前記注目ログ情報を正常終了した処理に係るログ情報と見做すことができるログ情報が存在するか否かを判定し、存在する場合は前記注目ログ情報を前記ログバッファから削除するバッファ最適化処理部とを備える。
【００１２】
本発明にかかるログ出力方法は、
ログバッファと、プログラム実行部と、バッファ最適化処理部とを備えたコンピュータが実行するログ出力方法であって、
前記プログラム実行部が、プログラムを実行し、該プログラムから出力されるログ情報を前記ログバッファに記録し、
前記バッファ最適化処理部が、前記ログバッファに記録されている注目ログ情報よりも記録時期が新しいログ情報の中に、前記注目ログ情報とプログラムの構造に基づいて定まる関係性を有し、前記注目ログ情報を正常終了した処理に係るログ情報と見做すことができるログ情報が存在するか否かを判定し、存在する場合は前記注目ログ情報を前記ログバッファから削除する。
【００１３】
本発明に係るプログラムは、
ログバッファを備えたコンピュータを、
プログラムを実行し、該プログラムから出力されるログ情報を前記ログバッファに記録するプログラム実行部、
前記ログバッファに記録されている注目ログ情報よりも記録時期が新しいログ情報の中に、前記注目ログ情報とプログラムの構造に基づいて定まる関係性を有し、前記注目ログ情報を正常終了した処理に係るログ情報と見做すことができるログ情報が存在するか否かを判定し、存在する場合は前記注目ログ情報を前記ログバッファから削除するバッファ最適化処理部として機能させる。
【発明の効果】
【００１４】
本発明によれば、正常終了した処理に係るログ情報であれば、正常終了した旨の記述がないログ情報であっても削除することができるという効果を得ることができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１の実施の形態に係るログ出力装置の構成例を示すブロック図である。
【図２】プログラム実行部の処理例を示すフローチャートである。
【図３】プログラム実行部が実行するプログラムの一例を示す図である。
【図４】ログバッファの内容例を示す図である。
【図５】バッファ最適化処理部の処理例を示すフローチャートである。
【図６】ログレベル毎の加算ポイントの一例を示す図である。
【図７】本発明の第２の実施の形態に係るログ出力装置の構成例を示すブロック図である。
【図８】本発明の第３の実施の形態に係るログ出力装置の構成例を示すブロック図である。
【図９】本発明の第４の実施の形態に係るログ出力装置の構成例を示すブロック図である。
【発明を実施するための形態】
【００１６】
次に、図面を参照して本発明の実施の形態について詳細に説明する。
【００１７】
[本発明の第１の実施の形態]
図１を参照すると、本発明の第１の実施の形態に係るログ出力装置１は、プログラム実行空間であるコンピュータ２上に構成されている。ログ出力装置１は、メモリ１１と、プログラム実行部１３と、バッファ最適化処理部１４と、エラーログ出力部１５とを備えている。
【００１８】
プログラム実行部１３は、プログラムを実行し、プログラムから出力されるログ情報をメモリ１１上に設けられたログバッファ１２に一時的に記録する機能や、プログラムからログレベルがERROR以上のログ情報が出力された場合、エラーログ出力部１５に対して出力指示を通知する機能を有する。なお、プログラムがマルチスレッド構造である場合には、プログラム実行部１３は、プログラムからログ情報と共に出力されるスレッドＩＤに基づいて、スレッド毎のログバッファ１２を作成し、該当するログバッファ１２にログ情報を時系列順に記録する。
【００１９】
バッファ最適化処理部１４は、ログバッファ１２に記録されているログ情報の内、正常終了した処理に係るログ情報を、ログレベルが低いログ情報から逐次削除する機能を有する。
【００２０】
エラーログ出力部１５は、プログラム実行部１３から出力指示が通知されたとき、各スレッドに対応するログバッファ１２に記録されているログ情報を、ログバッファ１２毎に時系列順でログファイル３へ出力する機能を有する。
【００２１】
なお、ログ出力装置１は、コンピュータ２によって実現可能であり、その場合は例えば、次のようにする。コンピュータ２をプログラム実行部１３、バッファ最適化処理部１４及びエラーログ出力部１５として機能させるためのプログラムを記録したディスク、半導体メモリ、その他の記録媒体を用意し、コンピュータに上記プログラムを読み取らせる。コンピュータ２は、読み取ったプログラムに従って自身の動作を制御することにより、自コンピュータ２上に、プログラム実行部１３、バッファ最適化処理部１４、エラーログ出力部１５を実現する。また、図１では図示していないが、正常運用時に、所定ログレベル以上（例えば、INFO）のログ情報だけをログファイルに記録する正常運用時ログ記録部を設けるようにしてもよい。
【００２２】
次に、本実施の形態の動作について詳細に説明する。
【００２３】
先ず、プログラム実行部１３の動作を説明する。プログラム実行部１３は、プログラムの実行時にプログラムからログ情報とスレッドＩＤが出力されると、図２のフローチャートに示すように、上記スレッドＩＤに対応するログバッファ１２を作成済みか否かを判定する（ステップＳ２１）。
【００２４】
そして、作成していない場合（ステップＳ２１が偽）は、上記スレッドＩＤ用のログバッファ１２をメモリ１１上に作成し、その後、作成したログバッファ１２にログ情報を記録する（ステップＳ２２、Ｓ２３）。これに対して、作成済みの場合（ステップＳ２１が真）は、プログラムから出力されたスレッドＩＤに対応するログバッファ１２に、ログ情報を記録する（ステップＳ２３）。図３にプログラム実行部１３が実行するプログラムの一例を示し、図４に上記プログラムを実行した際にログバッファ１２に記録されるログ情報を示す。図４に示すように、プログラム実行部１３は、[処理日時]、[クラス名]、[関数名]、[ログレベル]、[行数]、[メッセージ]、[廃棄ポイント]から構成されるログ情報を、１行分の情報としてログバッファ１２に書き込む。ここで、処理時刻は、ログ情報を出力した時刻、クラス名及び関数名は、それぞれログ情報が関連するクラス及び関数の名前、行数は、そのログ情報が関連するプログラムの行を示す。また、廃棄ポイントは、ログ情報をログバッファ１２から削除するか否かの判定基準になる値であり、初期値は「０」である。
【００２５】
その後、プログラム実行部１３は、ログ情報のログレベルがERROR以上か否かを判定する（ステップＳ２４）。そして、ERROR未満である場合（ステップＳ２４が偽）は、処理を終了する。これに対して、ERROR以上である場合（ステップＳ２４が真）は、エラーログ出力部１５に対して出力指示を通知する（ステップＳ２５）。これにより、エラーログ出力部１５は、各スレッドに対応するログバッファ１２に記録されているログ情報をログファイル３に出力する。
【００２６】
次に、バッファ最適化処理部１４の動作を説明する。なお、本実施の形態では、メモリ１１上のログバッファ１２の総数はＮであるとする。
【００２７】
バッファ最適化処理部１４は、定期的に図５のフローチャートに示すバッファ最適化処理を実行する。バッファ最適化処理は、大きく分けて終了判定部（Ａ）と、廃棄判定部（Ｂ）と、第１のループ処理判定部（Ｃ）と、第２のループ処理判定部（Ｄ）と、関数単位の正常処理判定部（Ｅ）と、トランザクション処理判定部（Ｆ）とに分かれる。
【００２８】
各判定部（Ａ）〜（Ｆ）で行う処理の概要を説明する。
【００２９】
終了判定部（Ａ）では、メモリ１１上に作成されている全てのログバッファ１２において、処理対象にすべきログ情報に対する処理が全て完了しているか否かを判定し、終了している場合、バッファ最適化処理を終了する。
【００３０】
廃棄判定部（Ｂ）では、処理対象にしているログ情報の廃棄ポイントと廃棄用閾値とを比較し、廃棄ポイントが廃棄用閾値以上の場合、処理対象にしているログ情報を削除する。
【００３１】
第１及び第２のループ処理判定部（Ｃ），（Ｄ）では、正常終了したループ処理に係るログ情報を検出し、そのログ情報の廃棄ポイントに、そのログ情報のログレベルに応じた加算ポイントを加算する。図６を参照すると、ログレベルに応じた加算ポイントの一例が示されている。この例では、ログレベルが低いほど、加算ポイントが大きくなっている。これは、ログレベルの低いログ情報ほど、ログバッファ１２から削除されやすくするためである。
【００３２】
関数単位の正常終了判定部（Ｅ）では、呼び出された関数によって行われた正常終了した処理に係るログ情報を検出し、そのログ情報の廃棄ポイントに、そのログ情報のログレベルに応じた加算ポイントを加算する。
【００３３】
次に、バッファ最適化処理部１４の動作を詳しく説明する。
【００３４】
図５のフローチャートを参照すると、バッファ最適化処理部１４は、先ず、何番目のログバッファ１２なのかを示す変数ｎを「１」にし、何番目のログ情報なのかを示す変数ｍをＭ（ｎ）とする（ステップＳ５１）。ここで、Ｍ（ｎ）は、第ｎ番目のログバッファ１２に記録されているログ情報の総数である。また、第１番目のログ情報が最も記録時期が古いログ情報である。
【００３５】
次に、バッファ最適化処理部１４は、ｎ＞Ｎとなっているか否かを判定することにより、全てのログバッファ１２について処理が完了したか否かを判定する（ステップＳ５２）。この例の場合、ｎ＝１であるので、ステップＳ５２の判定結果は偽となり、ステップＳ５３に移行する。ステップＳ５３では、処理対象にするログ情報として、第ｎ番目のログバッファ１２に記録されている第ｍ番目のログ情報を入力する。なお、以下の説明では、第ｎ番目のログバッファ１２に記録されている第ｍ番目のログ情報をログ情報L(n)(m)と記す場合がある。
【００３６】
その後、バッファ最適化処理部１４は、廃棄判定部（Ｂ）に関する処理を行う。廃棄判定部（Ｂ）では、先ず、ログ情報L(n)(m)の廃棄ポイントが予め定められている廃棄用閾値以上になったか否かを判定する（ステップＳ５４）。そして、廃棄ポイントが廃棄用閾値未満の場合（ステップＳ５４が偽）は、ステップＳ５６に移行する。これに対して、廃棄用閾値以上の場合（ステップＳ５４が真）は、ログバッファ１２に記録されているログ情報L(n)(m)を削除する（ステップＳ５５）。
【００３７】
その後、バッファ最適化処理部１４は、第１のループ処理判定部（Ｃ）に関する処理を行う。第１のループ処理判定部（Ｃ）では、先ず、処理対象にしているログ情報L(n)(m)よりも記録時期が古いログ情報の中に、ログ情報L(n)(m)に含まれているメッセージとの一致率が予め定められている一致率閾値以上のメッセージを含んだログ情報L(n)(w)が存在するか否かを判定する（ステップＳ５６）。
【００３８】
そして、そのようなログ情報L(n)(w)が存在しない場合（ステップＳ５６が偽）は、ステップＳ５８に移行する。これに対して、そのようなログ情報L(n)(w)が存在する場合（ステップＳ５６が真）は、ログ情報L(n)(w)は正常終了した処理（ループ処理の一部の処理）に係るログ情報である見做し、ログ情報L(n)(w)の廃棄ポイントに、ログ情報L(n)(w)のログレベルに応じた加算ポイントを加算する（ステップＳ５７）。なお、メッセージの一致率が一致率閾値以上のログ情報が複数存在する場合は、最も記録時期が新しいログ情報の廃棄ポイントに加算ポイントを加算する。
【００３９】
図３のプログラム例を参照すると、ループ処理では、カウンタ変数ｉ＝０，１，…のループがスタートする毎に、第１０行目の「ログ(”TRACE”,”loop start.->“+i);」が実行され、メッセージ「loop start.->0」,「loop start.->1」,…を含むログ情報が順次ログバッファ１２に出力される。また、ループ処理では、カウンタ変数ｉ＝０，１，…のループがエンドする毎に、第１２行目の「ログ(”DEBUG”,”loop end.”);」が実行され、メッセージ「loop end.」,「loop end.」,…を含むログ情報が順次ログバッファ１２に出力される。このように、ループ処理では、処理が正常に行われた場合、一致率が一致率閾値以上のメッセージを含んだログ情報が複数回、ログバッファ１２に出力される。そこで、本実施の形態では、上述したように、処理対象にしているログ情報L(n)(m)よりも記録時期が古いログ情報の中に、ログ情報L(n)(m)に含まれているメッセージとの一致率が予め定められている一致率閾値以上のメッセージを含んだログ情報L(n)(w)が存在する場合、ログ情報L(n)(w)は正常終了した処理に係るログ情報である見做し、廃棄ポイントに加算ポイントを加算するようにしている。
【００４０】
その後、バッファ最適化処理部１４は、第２のループ処理判定部（Ｄ）に関する処理を行う。第２のループ処理判定部（Ｄ）では、先ず、処理対象にしているログ情報L(n)(m)よりも記録時期が古いログ情報の中に、[クラス名]、[関数名]及び[行数]がログ情報L(n)(m)と一致しているログ情報L(n)(x)が存在するか否かを判定する（ステップＳ５８）。
【００４１】
そして、そのようなログ情報L(n)(x)が存在しない場合（ステップＳ５８が偽）は、ステップＳ６０に移行する。これに対して、そのようなログ情報L(n)(x)が存在する場合（ステップＳ５８が真）は、ログ情報L(n)(x)〜L(n)(m-1)は正常終了した処理に関するログ情報であると判断し、ログ情報L(n)(x)〜L(n)(m-1)の廃棄ポイントに、ログ情報L(n)(x)〜L(n)(m-1)のログレベルに応じた加算ポイントを加算する（ステップＳ５９）。なお、[クラス名]、[関数名]及び[行数]が一致するログ情報が複数存在する場合は、最も記録時期が新しいログ情報の廃棄ポイントに加算ポイントを加算する。
【００４２】
図３のプログラム例を参照すると、ループ処理では、カウンタ変数ｉ＝０，１，…のループがスタートする毎に、第１０行目の「ログ(”TRACE”,”loop start.->“+i);」が実行され、クラス名「testA」関数名「main」、行数「１０」を含むログ情報が順次ログバッファ１２に出力される。また、ループ処理では、カウンタ変数ｉ＝０，１，…のループがエンドする毎に、第１２行目の「ログ(”DEBUG”,”loop end.”);」が実行され、クラス名「testA」、関数名「main」、行数「１２」を含むログ情報が順次ログバッファ１２に出力される。このように、ループ処理では、処理が正常に行われた場合、[クラス名]、[関数名]及び[行数]が同一のログ情報が複数回、ログバッファ１２に出力される。そこで、本実施の形態では、上述したように、処理対象にしているログ情報L(n)(m)よりも記録時期が古いログ情報の中に、[クラス名]、[関数名]及び[行数]がログ情報L(n)(m)と一致しているログ情報L(n)(x)が存在する場合は、ログ情報L(n)(x)〜L(n)(m-1)を正常終了した処理に係るログ情報と見做し、廃棄ポイントに加算ポイントを加算するようにしている。
【００４３】
その後、バッファ最適化処理部１４は、関数単位の正常処理判定部（Ｅ）に関する処理を行う。関数単位の正常処理判定部（Ｅ）では、先ず、処理対象にしているログ情報L(n)(m) の[クラス名]、[関数名]と、それよりも記録時期が１つ前のログ情報L(n)(m-1)の[クラス名]、[関数名]とが異なるか否かを判定する（ステップＳ６０）。
【００４４】
そして、[クラス名]、[関数名]が同じ場合（ステップＳ６０が偽）は、ステップＳ６３に移行する。これに対して、[クラス名]、[関数名]が異なる場合（ステップＳ６０が真）は、処理対象にしているログ情報L(n)(m)よりも記録時期が古いログ情報の中に、[クラス名]、[関数名]がログ情報L(n)(m)と一致し、[行数]がログ情報L(n)(m)よりも小さいログ情報L(n)(y)が存在するか否かを判定する（ステップＳ６１）。
【００４５】
そして、そのようなログ情報L(n)(y)が存在しない場合（ステップＳ６１が偽）は、ステップＳ６３に移行する。これに対して、そのようなログ情報ログ情報L(n)(y)が存在する場合（ステップＳ６１が真）は、ログ情報L(n)(y-1)〜L(n)(m-1)は正常終了した処理に係るログ情報であると判断し、ログ情報L(n)(y-1)〜L(n)(m-1)の廃棄ポイントに、ログ情報L(n)(y-1)〜L(n)(m-1)のログレベルに応じた加算ポイントを加算する（ステップＳ６２）。
【００４６】
図３のプログラム例を参照すると、第６行目の「ログ(”DEBUG”,”b=”+b);」が実行されることにより、クラス名「testA」、関数名「main」、行数「６」を含むログ情報がログバッファ１２に出力される。その後、第７行目の「int c = testB.funcA(b);」が実行され、関数fancA( )が呼び出される。呼び出された関数fancA( )において第２３行目、第２５行目の「ログ(”DEBUG”,”fancA start.”);」, 「ログ(”DEBUG”,”d=”+d);」が実行されることにより、クラス名「testB」、関数名「fancA」を含んだログ情報がログバッファ１２に出力される。その後、呼び出し元の関数main( )に戻ると、第８行目の「ログ(”DEBUG”,”c”+c);」が実行され、クラス名「testA」、関数名「main」、行数「８」を含むログ情報がログバッファ１２に出力される。このように、関数呼び出し処理においては、クラス名「testA」、関数名「main」、行数「６」を含むログ情報が出力された後、クラス名「testB」、関数名「fancA」を含んだログ情報が出力され、更に、その後、クラス名「testA」、関数名「main」、行数「８」を含むログ情報が出力される。そこで、本実施の形態では、前述したように、処理対象にしているログ情報L(n)(m)と、それよりも記録時期が１つ前のログ情報L(n)(m-1)との[クラス名]、[関数名]が異なり、且つ、ログ情報L(n)(m)よりも記録時期が古いログ情報の中に、[クラス名]、[関数名]がログ情報L(n)(m)と一致し、[行数]がログ情報L(n)(m)よりも小さいログ情報L(n)(y)が存在する場合は、ログ情報L(n)(y-1)〜L(n)(m-1)は正常終了した処理に係るログ情報であると見做し、ログ情報L(n)(y-1)〜L(n)(m-1)の廃棄ポイントに、加算ポイントを加算するようにしている。
【００４７】
その後、バッファ最適化処理部１４は、終了判定部（Ａ）に関する処理を行う。終了判定部（Ａ）では、処理対象にするログ情報を記録時期が１つ前のログ情報に変更し（ステップＳ６３）、その後、第ｎ番目のログバッファ１２において、処理対象にすべきログ情報に対する処理が全て完了しているか否かを判定する（ステップＳ６４）。
【００４８】
そして、完了していない場合（ステップＳ６４が真）は、前述したステップＳ５２の処理を行う。これに対して、完了している場合（ステップＳ６４が偽）は、処理対象にするログバッファ１２を次のバッファに変更した後（ステップＳ６５）、前述したステップＳ５２の処理を行う。バッファ最適化処理部１４は、ステップＳ５２において、全てのログバッファ１２について処理が完了したと判断するまで、前述した処理を繰り返し行う。
【００４９】
なお、上述した説明では、ステップＳ５７、Ｓ５９、Ｓ６２において、正常終了した処理に係るログ情報と見做したログ情報については、その廃棄ポイントを増加するようにしたが、その代わりに、正常終了した処理に係るログ情報と見做したログ情報を削除するようにしても良い。その場合には、ステップＳ５４、Ｓ５５の処理は不要になる。
【００５０】
[第１の実施の形態の効果]
本実施の形態によれば、正常終了した処理に係るログ情報であれば、正常終了した旨の記述がないログ情報であっても削除することができるという効果を得ることができる。その理由は、ログバッファに記録されている注目ログ情報よりも記録時期が新しいログ情報の中に、ログバッファに記録されている注目ログ情報とプログラムの構造に基づいて定まる関係性を有し、上記注目ログ情報を正常終了した処理に係るログ情報と見做すことができるログ情報が存在する場合、上記注目ログ情報をログバッファから削除するようにしているからである。
【００５１】
また、本実施の形態によれば、ログレベルの低いログ情報を優先的に削除することができるという効果を得ることができる。その理由は、定期的に注目ログ情報を正常終了した処理に係るログ情報と見做すことができるログ情報が存在するか否かを判定し、存在する場合は注目ログ情報の廃棄ポイントに、前記注目ログ情報のログレベルに応じた加算ポイントを加算するようにしているからである。
【００５２】
[本発明の第２の実施の形態]
次に、本発明の第２の実施の形態について説明する。前述した第１の実施の形態では、ログ出力装置１をプログラム実行空間であるコンピュータ２上に配置した。このため、コンピュータ２に重大な障害が発生してコンピュータ２自体が停止した場合、ログバッファ１２がなくなってしまい、ログ情報を出力することができなくなってしまう。そこで、本実施の形態では、図７に示すように、プログラム実行空間であるコンピュータ２とは別のコンピュータ４をログ出力サービス用に用意する。そして、コンピュータ２上には、プログラム実行部１３を配置し、コンピュータ４上には、ログバッファ１２が作成されたメモリ１１、バッファ最適化処理部１４、エラーログ出力部１５、及びログ出力受付部１６を配置する。
【００５３】
プログラム実行部１３は、プログラムを実行し、プログラムから出力されるログ情報とスレッドＩＤとをソケット通信などにより、ログ出力サービス用のコンピュータ４へ送信する。コンピュータ４内のログ出力受付部１６は、プログラム実行部１３から送られてきたログ情報およびスレッドＩＤを受け付けると、ログ情報を該当するログバッファ１２に記録する。また、ログレベルがERROR以上のログ情報を受け付けた場合は、エラーログ出力部１５に対して、出力指示を通知する。上記以外の動作は、第１の実施の形態と同様である。
【００５４】
[第２の実施の形態の効果]
本実施の形態によれば、障害によりプログラム実行空間であるコンピュータ２が停止した場合であっても、ログ情報を出力することができるという効果を得ることができる。その理由は、コンピュータ２とは別に、ログ出力サービス用のコンピュータ４を用意し、コンピュータ4上にログバッファ１２が作成されたメモリ１１、バッファ最適化処理部１４、エラーログ出力部１５、及びログ出力受付部１６を配置するようにしているからである。
【００５５】
[本発明の第３の実施の形態]
次に、本発明の第３の実施の形態について説明する。前述した第１の実施の形態は、メモリ１１上のログバッファ１２にログ情報を記録するようにした。このため、メモリ１１の使用量が多くなるという課題がある。そこで、本実施の形態のログ出力装置１ａでは、プログラム実行部１３がメモリ１１上のログバッファ１２ではなく、ディスク１７上の一時ログファイル１８にログ情報を記録するように構成した。
【００５６】
[第３の実施の形態の効果]
本実施の形態によれば、メモリの使用量を少なくすることができる。その理由は、ディスク上の一時ログファイルにログ情報を記録するようにしているからである。
【００５７】
[本発明の第４の実施の形態]
次に、本発明の第４の実施の形態について説明する。図９を参照すると、本発明の第４の実施の形態に係るログ出力装置は、プログラム実行部１００と、ログバッファ１０１と、バッファ最適化処理部１０２とを備えている。
【００５８】
プログラム実行部１００は、プログラムを実行し、プログラムから出力されるログ情報をログバッファ１０１に記録する。
【００５９】
バッファ最適化処理部１０２は、例えば、定期的に、ログバッファ１０１に記録されている注目ログ情報よりも記録時期が新しいログ情報の中に、上記注目ログ情報とプログラムの構造に基づいて定まる関係性を有し、上記注目ログ情報を正常終了した処理に係るログ情報と見做すことができるログ情報が存在するか否かを判定する。そして、そのようなログ情報が存在場合は上記注目ログ情報をログバッファ１０１から削除する。
【００６０】
[第４の実施の形態の効果]
本実施の形態によれば、正常終了した処理に係るログ情報であれば、正常終了した旨の記述がないログ情報であっても削除することができるという効果を得ることができる。その理由は、ログバッファに記録されている注目ログ情報よりも記録時期が新しいログ情報の中に、ログバッファに記録されている注目ログ情報とプログラムの構造に基づいて定まる関係性を有し、上記注目ログ情報を正常終了した処理に係るログ情報と見做すことができるログ情報が存在する場合、上記注目ログ情報をログバッファから削除するようにしているからである。
【産業上の利用可能性】
【００６１】
本発明は、アプリケーションやオペレーティングシステムなど、プログラム全般に適用可能である。
【符号の説明】
【００６２】
１、１ａ・・・ログ出力装置
１１・・・メモリ
１２・・・ログバッファ
１３・・・プログラム実行部
１４・・・バッファ最適化処理部
１５・・・エラーログ出力部
１６・・・ログ出力受付部
１７・・・ディスク
１８・・・一時ログファイル
２、４・・・コンピュータ
３・・・ログファイル
１００・・・プログラム実行部
１０１・・・ログバッファ
１０２・・・バッファ最適化処理部
【図１】
2014164464.tif 000003
【図２】
2014164464.tif 000004
【図３】
2014164464.tif 000005
【図４】
2014164464.tif 000006
【図５】
2014164464.tif 000007
【図６】
2014164464.tif 000008
【図７】
2014164464.tif 000009
【図８】
2014164464.tif 000010
【図９】
2014164464.tif 000011