(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-07-03
(45)【発行日】2023-07-11
(54)【発明の名称】ログ出力装置、及び、ログ出力方法
(51)【国際特許分類】
G06F 11/30 20060101AFI20230704BHJP
G06F 11/34 20060101ALI20230704BHJP
【FI】
G06F11/30 182
G06F11/34 176
G06F11/30 140D
(21)【出願番号】P 2019153807
(22)【出願日】2019-08-26
【審査請求日】2022-04-28
(73)【特許権者】
【識別番号】308036402
【氏名又は名称】株式会社JVCケンウッド
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】笠原 力弥
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特開2011-113443(JP,A)
【文献】特開2011-145830(JP,A)
【文献】米国特許第09619478(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/30-11/34
(57)【特許請求の範囲】
【請求項1】
アプリケーション実行中に発生する複数の異なるイベントのログデータをイベント単位で記憶する記憶部と、
最新イベントのログデータと、前記最新イベントと同じ種類のイベントであり、かつ、前記最新イベントの時間的に直近に発生して前記記憶部に記憶された直近イベントのログデータとの差分情報をログ記録情報として出力するログ情報出力部と、
を備え、
前記ログ情報出力部は、前記ログ記録情報が記録される記録装置の空き容量に応じて、前記ログ記録情報に含まれるログの内容を説明するログメッセージを文章情報、単語情報または文字情報に切り替えて出力可能とする、
ことを特徴とするログ出力装置。
【請求項2】
アプリケーション実行中に発生する複数の異なるイベントのログデータをイベント単位で記憶する記憶部と、
最新イベントのログデータと、前記最新イベントと同じ種類のイベントであり、かつ、前記最新イベントの時間的に直近に発生して前記記憶部に記憶された直近イベントのログデータとの差分情報をログ記録情報として出力するログ情報出力部と、を備え、
前記最新イベントのログデータと前記直近イベントのログデータとが同一のログメッセージを含む場合、もしくは、前記直近イベントのログデータに含まれていたログメッセージが前記最新イベントのログデータから削除されている場合、前記ログ情報出力部は、前記ログメッセージをそれぞれ予め定めた記号で示した前記ログ記録情報を出力する、
ことを特徴とするログ出力装置。
【請求項3】
前記ログ情報出力部は、前記差分情報のデータ量が前記最新イベントのログデータのデータ量よりも大きい場合には、該最新イベントのログデータを前記ログ記録情報として出力することを特徴とする請求項1
または2に記載のログ出力装置。
【請求項4】
時間的に先に発生した先イベントのログデータを記憶するログ情報記憶部と、
前記先イベントのログデータと同じ種類のイベントであり、かつ、該先イベントよりも後に発生した後イベントのログ情報と前記先イベントのログ情報との差分情報であるログ記録情報と、前記ログ情報記憶部に記録された前記先イベントのログデータとから、前記後イベントのログデータを復元して出力するログデータ出力部と、を備えることを特徴とする請求項1
または2に記載のログ出力装置。
【請求項5】
アプリケーション実行中に発生する複数の異なるイベントのログデータをイベント単位で記憶部に記憶するステップと、
最新イベントのログデータと、前記最新イベントと同じ種類のイベントであり、かつ、前記最新イベントの時間的に直近に発生して前記記憶部に記憶された直近イベントのログデータとの差分情報をログ記録情報として出力するステップと、
を備え、
前記最新イベントのログデータと前記直近イベントのログデータとが同一のログメッセージを含む場合、もしくは、前記直近イベントのログデータに含まれていたログメッセージが前記最新イベントのログデータから削除されている場合、前記ログ記録情報は、前記ログメッセージをそれぞれ予め定めた記号で示して出力される、
ことを特徴とするログ出力方法。
【請求項6】
前記差分情報を前記ログ記録情報として出力するステップでは、前記ログ記録情報が記録される記録装置の空き容量に応じて、前記ログ記録情報に含まれるログの内容を説明するログメッセージを文章情報、単語情報または文字情報に切り替えて出力することを特徴とする請求項5に記載のログ出力方法。
【請求項7】
時間的に先に発生した先イベントのログデータを記憶するステップと、
前記先イベントのログデータと同じ種類のイベントであり、かつ、該先イベントよりも後に発生した後イベントのログ情報と前記先イベントのログ情報との差分情報であるログ記録情報と、記憶された前記先イベントのログデータとから、前記後イベントのログデータを復元して出力するステップと、をさらに備えることを特徴とする請求項5または6に記載のログ出力方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、アプリケーションの動作履歴を記録したログデータを出力するログ出力装置、及び、ログ出力方法に関する。
【背景技術】
【0002】
アプリケーションの稼働状況の解析や不測の事態が発生した際の問題箇所の特定のために、該アプリケーションの動作履歴を記録することが一般的に行われている。この動作履歴はログデータと呼ばれ、アプリケーション実行時の各種操作などの動作履歴が記録装置(例えば、ハードディスク)に出力されて記録されている。通常、ログデータは時間とともに蓄積され肥大化して記録装置の空き容量を圧迫するため、データサイズが規定値に達したり、一定期間が経過したりするとログデータの削除や移動などの操作が必要となる。特許文献1には、ログデータを伝送するためにログデータのデータ量を圧縮する技術が開示されている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1の技術では、ログデータの複雑な参照関係を使って差分を抽出することでデータ量の圧縮率を高めている。しかし、上記した従来技術によれば、圧縮率を高めることはできるものの、問題箇所を特定するために解析者が圧縮データを直接観察しても理解することはできず、圧縮データの復号化が必要であり、単純に圧縮率の向上に主眼が置かれたものであった。
【0005】
本発明は、上記課題を鑑みてなされたものであり、ログ記録情報の可読性を保持しつつ、ログ記録情報の圧縮率の向上を図ったログ出力装置、及び、ログ出力方法を提供することを目的とする。
【課題を解決するための手段】
【0006】
上述した課題を解決し、目的を達成するために、本発明に係るログ出力装置は、アプリケーション実行中に発生する複数の異なるイベントのログデータをイベント単位で記憶する記憶部と、最新イベントのログデータと、前記最新イベントと同じ種類のイベントであり、かつ、前記最新イベントの時間的に直近に発生して前記記憶部に記憶された直近イベントのログデータとの差分情報をログ記録情報として出力するログ情報出力部と、を備え、前記ログ情報出力部は、前記ログ記録情報が記録される記録装置の空き容量に応じて、前記ログ記録情報に含まれるログの内容を説明するログメッセージを文章情報、単語情報または文字情報に切り替えて出力可能とする。
【発明の効果】
【0007】
本発明によれば、イベント単位でログデータの差分を求めることで、ログ記録情報の可読性を保持しつつ、ログ記録情報の効率の良い圧縮を実現できる。
【図面の簡単な説明】
【0008】
【
図1】
図1は、実施形態1に係るログ出力装置の構成を示すブロック図である。
【
図2】
図2は、イベント単位で設けたログ出力装置を示すブロック図である。
【
図3】
図3は、最新イベントのログデータと直近イベントのログデータとの差分から圧縮データを出力する動作を説明するための図である。
【
図4】
図4は、最新イベントのログデータと直近イベントのログデータとの差分から圧縮データを出力する動作を説明するための図である。
【
図5】
図5は、最新イベントのログデータと直近イベントのログデータとの差分から圧縮データを出力する動作を説明するための図である。
【
図6】
図6は、最新イベントのログデータと直近イベントのログデータとの差分から圧縮データを出力する動作を説明するための図である。
【
図7】
図7は、ログデータの符号化処理の手順を示すフローチャートである。
【
図8】
図8は、ログデータの符号化処理の手順を示すフローチャートである。
【
図9】
図9は、イベントの一連のログデータ群と圧縮データ群とを並べて示した図である。
【
図10】
図10は、実施形態2に係るログ出力装置の構成を示すブロック図である。
【
図11】
図11は、イベント単位で設けたログ復元部を示すブロック図である。
【
図12】
図12は、先イベントのログデータと圧縮データとから後イベントのログデータを復元する動作を説明するための図である。
【
図13】
図13は、先イベントのログデータと圧縮データとから後イベントのログデータを復元する動作を説明するための図である。
【
図14】
図14は、先イベントのログデータと圧縮データとから後イベントのログデータを復元する動作を説明するための図である。
【
図15】
図15は、先イベントのログデータと圧縮データとから後イベントのログデータを復元する動作を説明するための図である。
【
図16】
図16は、ログデータの復号化処理の手順を示すフローチャートである。
【
図17】
図17は、ログデータの復号化処理の手順を示すフローチャートである。
【
図18】
図18は、記録装置のファイルに保存される圧縮データ群と、復元されたログデータ群とを並べて示した図である。
【発明を実施するための形態】
【0009】
以下に、本発明に係る実施形態を図面に基づいて詳細に説明する。なお、この実施形態によりこの発明が限定されるものではない。また、以下の実施形態における構成要素には、当業者が置換可能かつ容易なもの、あるいは実質的に同一のものが含まれる。
【0010】
[実施形態1]
図1は、実施形態1に係るログ出力装置の構成を示すブロック図である。
図2は、イベント単位で設けたログ出力装置を示すブロック図である。
図1に示すように、ログ出力装置10には、アプリケーション装置20と記録装置30とが接続されている。アプリケーション装置20は、例えば、コンピュータや電子機器などの各種機能を発揮するためのアプリケーション(プログラム)を実行する。アプリケーション装置20は、アプリケーションの実行中に順次実行される(発生する)イベントのための操作部21を備える。
【0011】
操作部21は、例えばグラフィカルユーザインターフェース(GUI)上に配置される複数(例えば2つ)のAボタン22と、Bボタン23とを備えて構成されている。これらのAボタン22及びBボタン23は、それぞれ異なるイベントを実行するための操作ボタンである。本実施形態では、GUI上に配置されたAボタン22をユーザがクリックするとイベントAが実行され、Bボタン23をユーザがクリックすると、イベントAとは異なるイベントBが実行される。アプリケーション装置20は、これらイベントA,Bが実行されると、該イベントA,Bに関する一連のログ(操作情報や動作情報、エラー情報など)を示すログデータを作成してログ出力装置10に出力する。なお、本実施形態では、説明の便宜上、操作部21が備えるボタンの数を2つにしたが、これに限るものではなく、ボタンの数に対応して実行されるイベントの数が増えるものとする。また、イベントを実行するための操作部21は、GUI上に配置されるボタンに限るものではない。
【0012】
ログ出力装置10は、ログ情報取得部11と、第1ログ記憶部12と、第2ログ記憶部13と、ログ符号化部(ログ情報出力部)14と、ファイル出力部15とを備える。ログ情報取得部11は、アプリケーション装置20から順次出力される最新イベント(例えば最新に実行されたイベントA)が実行された際の一連のログデータを取得して第1ログ記憶部12に記憶する。第1ログ記憶部12には、最新イベントのログデータが記憶されている。第2ログ記憶部13には、第1ログ記憶部12に記憶されている最新イベントと同じ種類のイベントであって、該最新イベントに時間的に直近に実行された直近イベントの一連のログデータが記憶されている。第1ログ記憶部12に新たな最新イベントが入力されると、それまで第1ログ記憶部12に記憶されていた最新イベントの一連のログデータは、直近イベントのログデータとして第2ログ記憶部13に入力されて記憶される。この際、第2ログ記憶部13にそれまで記憶されていたログデータは消去されて、新たな入力されたログデータが直近イベントのログデータとして第2ログ記憶部13に記憶される。
【0013】
ログ符号化部14は、第1ログ記憶部12に記憶された最新イベントのログデータと、第2ログ記憶部13に記憶された直近イベントのログデータとの差分(差分情報)を圧縮データ(ログ記録情報)として出力する。ここで、アプリケーションが起動されて初めてイベントが実行された場合には、第2ログ記憶部13には何もログデータが記憶されていない。このため、ログ符号化部14は、第1ログ記憶部12に記憶された最新イベントのログデータをそのまま圧縮データとして出力する。ファイル出力部15は、ログ符号化部14から出力された圧縮データを同じファイルの末尾に追加する。
【0014】
本実施形態では、ログ出力装置10は、上記したGUIを備えたアプリケーション(プログラム)に組み込まれるログ出力モジュールである。このため、ログ出力装置10の各構成要素であるログ情報取得部11、第1ログ記憶部12、第2ログ記憶部13、ログ符号化部14及びファイル出力部15は、プログラム(ソフトウェア)で構成されており、例えば、アプリケーションの作成時にプログラマーが必要に応じてアプリケーション内に組み込んでいる。また、これらをプログラムで実現する場合、該プログラムは、インストール可能な形式又は実行可能な形式のファイルでCD-ROM、フレキシブルディスク(FD)、CD-R、DVD等のコンピュータで読み取り可能な記録媒体に記録されてコンピュータプログラムプロダクトとして提供されてもよい。また、プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。
【0015】
また、上記したログ出力装置10は、プログラムに限るものではなく、例えば、CPU、RAM,ROMなどを備えたマイクロプロセッサまたはマイクロコンピュータなどのハードウェアで構成されていてもよい。さらに、プログラム(ソフトウェア)とハードウェアとを組み合わせて構成してもよい。
【0016】
上記のように、本実施形態では、異なる2つ(複数)のイベントが実行されるように構成されている。このため、ログ出力装置10は、
図2に示すようにイベント単位ごとに2系統のモジュールが実装されている。このため、ログ情報取得部11A、第1ログ記憶部12A、第2ログ記憶部13A、及びログ符号化部14Aのモジュールには、イベントAのログデータが入力されて圧縮処理される。また、ログ情報取得部11B、第1ログ記憶部12B、第2ログ記憶部13B、及びログ符号化部14Bのモジュールには、イベントBのログデータが入力されて圧縮処理される。各イベントのログ符号化部14A,14Bから出力された圧縮データは、同じファイルの末尾にそれぞれ追加するように記録され、1つのログファイルとして記録装置30に記録される。
【0017】
記録装置30は、例えば、ハードディスクで構成される。この記録装置30は、自己の空き容量を取得する機能を備え、取得した空き容量をログ符号化部14に出力する。ログ符号化部14は、記録装置30の空き容量に応じてログデータの差分の取り方を変更する。なお、ログ符号化部14が記録装置30の空き容量を取得する機能(空き容量取得部)を備えてもよい。
【0018】
次に、実施形態1に係るログ出力装置10の動作について説明する。このログ出力装置10は、イベントAが実行された場合を例示する。なお、ログ出力装置10の構成要素は単にログ情報取得部11、第1ログ記憶部12、第2ログ記憶部13、及びログ符号化部14と表記する。
図3~
図6は、最新イベントのログデータと直近イベントのログデータとの差分から圧縮データを出力する動作を説明するための図である。これらの
図3~
図6において、各ログデータ40-1、40-2は、それぞれヘッダラベル41とログメッセージ列42とを備えて構成される。ヘッダラベル41は、ログデータのイベントの種類及びイベントが実行された(発生した)順番を示し、例えば、イベントA(1)は、アプリケーションが起動されてからイベントAの初回の実行であることを示す。そして、イベントA(2)、イベントA(3)・・・は、該イベントAの2回目、3回目の実行であることを示している。
【0019】
ログメッセージ列42は、イベントの実行で出力されたログデータの内容を説明するログメッセージの集合体であり、各行に記載されたログメッセージがそれぞれ動作内容を示している。ログメッセージは、動作内容を文章で説明したものであり、例えば、『func1 処理が開始しました;A1』、『表示処理が正常に行われました;A2』、『OK処理が正常に行われました;A3』などである。本実施形態では、同一の動作内容を示すメッセージには、同一の符号A1、A2・・が付されている。
【0020】
アプリケーションが起動されて初めてイベントAが実行された場合、
図3に示すように、ログ情報取得部11から出力された最新イベントAのログデータ40-1が第1ログ記憶部12に記憶される。この時点では、第2ログ記憶部13には、何もログデータ(直近ログデータ40-2)が記憶されていない(NULL)。このため、ログ符号化部14は、第1ログ記憶部12に記憶された最新イベントAのログデータ40-1をそのまま圧縮データ50として出力する。この圧縮データ50は、ログデータと同様に、ヘッダラベル51とログメッセージ列52とを備えて構成されており、ヘッダラベル51のイベントA(R)は、最新イベントAのログデータ40-1がそのまま出力されている(Raw Dataである)ことを示している。
【0021】
圧縮データ50を出力した後、
図4に示すように、第1ログ記憶部12には、新たな最新イベントAのログデータ40-1が入力されるため、それまで第1ログ記憶部12に記憶されていたログデータは、直近イベントのログデータ40-2として第2ログ記憶部13に移動して該第2ログ記憶部13に記憶される。
【0022】
ログ符号化部14は、第1ログ記憶部12に記憶された最新イベントのログデータ40-1と、第2ログ記憶部13に記憶された直近イベントのログデータ40-2との差分を取って圧縮データ50として出力する。イベントAの実行が2回目以降では、第2ログ記憶部13に直近イベントのログデータ40-2が記憶されている。このため、最新イベントのログデータ40-1と直近イベントのログデータ40-2との差分は、各ログデータのログメッセージを行単位で比較することで取得される。具体的には、
図4及び
図5に示すように、ログデータ40-1のログメッセージ列42から符号化が未処理の最上行のログメッセージ(例えばログメッセージA2)を取得し、このログメッセージと、ログデータ40-2のログメッセージ列42の符号化が未処理の最上行から1行ずつ行単位で比較し、ログメッセージ(行の内容)が一致する行が発見されるまで比較を行う。
【0023】
ここで、直近イベントのログデータ40-2のログメッセージ列42に該ログメッセージと一致する行が発見された場合には、ログ符号化部14は、この一致する行に対して所定の一致記号『=』とログメッセージの符号(例えば『A2』)を出力する。また、ログデータ40-2のログメッセージ列42に、該ログメッセージと一致する行が発見されない場合には、ログ符号化部14は、新たなログメッセージ(例えばログメッセージA4)が追加されたと判断して、該ログメッセージをそのまま出力する。次に、ログ符号化部14は、最新イベントのログデータ40-1の2行目に移行し、最下行のログメッセージまで上記した差分取得の動作を行う。
【0024】
直近イベントのログデータ40-2のログメッセージ列42のうち、最新イベントのログデータ40-1のログメッセージと一致する行が発見された場合、ログ符号化部14は、上記一致する行が発見されるまでに不一致であった行が最新イベントのログデータ40-1で削除されていると判断する。そして、ログ符号化部14は、削除された行に対して、所定の記号『-』とログメッセージの符号(例えば『A1』)を出力する。
【0025】
ログ符号化部14は、上記のように、最新イベントのログデータ40-1と直近イベントのログデータ40-2との差分を取って圧縮データ50として出力する。この場合の圧縮データ50のヘッダラベル51には、イベントA(D)と記載されている。これは、圧縮データ50において、差分情報(Differential Data)が出力されていることを示している。
【0026】
また、最新イベントのログデータ40-1と直近イベントのログデータ40-2とを比較した際に、
図6に示すように、ログメッセージの内容がまったく異なっていることも想定される。この場合、ログデータ40-1とログデータ40-2との差分情報50αを取得することができるが、この差分情報50αは、最新イベントのログデータ40-1よりもデータ量が大きくなってしまうことがある。このため、ログ符号化部14は、差分情報50αと最新イベントのログデータ40-1のデータ量の大きさを比較し、データ量の小さい方を圧縮データとして出力する。
図6の例では、差分情報50αよりもログデータ40-1の方が、データ量が小さいため、ログデータ40-1をそのまま(Raw Data)出力する。
【0027】
次に、ログ符号化部14の符号化処理動作について説明する。
図7及び
図8は、ログデータの符号化処理の手順を示すフローチャートである。この符号化処理は、ひとつのイベント(例えばイベントA)の一連の処理が終了して、第1ログ記憶部12にログメッセージ列42がすべて出揃った後に開始される。
【0028】
[イベントがログを出力しない場合]
はじめに、
図7のフローチャートに示すように、ログ符号化部14は、第1ログ記憶部12に記憶されているログメッセージ列42の行数(Lines1)を検査する(ステップS101)。Lines1が0行(NULL)であった場合(ステップS101;Yes)には、ログ符号化部14は、第1ログ記憶部12に記憶されたログメッセージ列42がそのまま圧縮データ50として出力されることを示す(R)をイベント名に付加したヘッダラベル51をファイル出力部15に出力する(ステップS102)。ただし、Lines1の行数は0行でありログメッセージ列42が存在しないため、ログ符号化部14は、ヘッダラベル51のみを出力して終了する。
【0029】
[イベントのログをそのまま出力する場合]
一方、Lines1が0行でない場合(ステップS101;No)は、ログ符号化部14は、第2ログ記憶部13に記憶されているログメッセージ列42の行数(Lines2)を検査する(ステップ103)。このステップS103において、Lines2が0行(NULL)であった場合(ステップS103;Yes)には、ログ符号化部14は、第1ログ記憶部12に記憶されたログメッセージ列42がそのまま圧縮データ50として出力されることを示す(R)をイベント名に付加したヘッダラベル51をファイル出力部15に出力する(ステップS104)。
【0030】
続けて、ログ符号化部14は、第1ログ記憶部12に記憶されているログメッセージ列42の行位置を指す変数mに1を設定する(ステップS105)。さらに、ログ符号化部14は、該ログメッセージ列42のm行目のログメッセージ(Log1(m))を出力する(ステップS106)。ログ符号化部14は、変数mの値に1を順次加算(ステップS107)して、変数mがLines1の行数より大きくない場合(ステップS108;No)は、大きくなるまでステップS106へ処理を戻し、第1ログ記憶部12のログメッセージを1行ずつファイル出力部15に出力する。変数mがLines1の行数より大きい場合(ステップS108;Yes)には、第1ログ記憶部12に記憶されているログメッセージがすべて出力されるため処理を終了する。ここまでの処理は、上記した
図3の場合に相当する。
【0031】
[イベント間のログ差分情報を出力する場合]
また、ステップS103において、Lines2が0行でない場合(ステップS103;No)には、ログ符号化部14は、第1ログ記憶部12と第2ログ記憶部13との差分データが出力されていることを示す(D)をイベント名に付加したヘッダラベル51をファイル出力部15に出力する(ステップS109)。この後、
図8に示す、差分データを生成する処理に遷移する。
【0032】
図8に示す符号化処理では、第2ログ記憶部13に記憶されたログデータ40-2のログメッセージ列42がどのように変化して第1ログ記憶部12のログメッセージ列42になるかを符号化(差分情報を出力)する処理である。本実施形態では、上記したメッセージ列42の変化を記号に変換して、第2ログ記憶部13に存在したログメッセージが第1ログ記憶部12で出現しなかった場合はマイナス記号(-)で表現し、同じログメッセージが出現した場合はイコール記号(=)で表現する。ただし、第1ログ記憶部12に新たに出現したログメッセージは、記号ではなくそのままのログメッセージとして出力する。
【0033】
本発明の符号化によりデータ量を削減(圧縮)する仕組みは、同じイベントは実行する度に同じログメッセージ列を出力する確率が高いことに基づいている。ただし、必ずしもデータ量が削減されるとは限らないため、フローチャートには図示していないが、
図6に示すように、1イベント当たりのログメッセージ列について、符号化した場合のデータ量と、符号化しない場合のデータ量を比較して、データ量の少ない方をログ符号化部14から出力する構成として、必ず元のログメッセージ列よりもデータ量が削減できることを保障する。仮に、符号化しない方のデータ量が少ない場合は、符号化したデータは出力せず、第1ログ記憶部12のログメッセージ列42がそのまま圧縮データ50として出力されることを示す(R)をイベント名に付加したヘッダラベル51と、第1ログ記憶部12のログメッセージ列42を、ファイル出力部15に出力する。
【0034】
[イベント間で一致するログメッセージの検索する]
図8の処理では、はじめに、ログ符号化部14は、第1ログ記憶部12に記憶されたログメッセージ列42の行位置を指す変数mに1を設定し、同様に第2ログ記憶部13の行番号を指す変数nに1を設定する(ステップS111)。また、ログ符号化部14は、第2ログ記憶部13のログメッセージ列42を検索するための変数xに変数nの値を代入する(ステップS112)。
【0035】
次に、ログ符号化部14は、第1ログ記憶部12のログメッセージ列42のm行目のログメッセージ(Log1(m))と、第2ログ記憶部13のログメッセージ列42のx行目のログメッセージ(Log2(x))とを比較して、これらが一致しているかを判別する(ステップS113)。ここで、ログメッセージ(Log1(m))とログメッセージ(Log2(x))とが一致していなければ(ステップS113;No)、変数xに1を加算する(ステップS114)。さらに、ログ符号化部14は、変数xが第2ログ記憶部13のログメッセージ列42の行数(Lines2)よりも大きいかを検査する(ステップS115)。変数xがLines2以下の場合(ステップS115;No)は、処理をステップS113へ戻して、第1ログ記憶部12のログメッセージと一致する第2ログ記憶部13のログメッセージを検索するループを構成する。
【0036】
[後イベントに新たに出現したログメッセージの処理]
一方で、変数xがLines2よりも大きい場合(ステップS115;Yes)は、一致するログメッセージが見つからない、すなわち、Log1(m)は新たに出現したログメッセージであるため、ログ符号化部14は、Log1(m)を出力する(ステップS121)。
【0037】
次いで、ログ符号化部14は、変数mに1を加算して(ステップS122)、変数mが第1ログ記憶部12のログメッセージ列42の行数(Lines1)より大きいかを判別する(ステップS123)。変数mがLines1以下の場合(ステップS123;No)は、処理をステップS112へ戻して、第1ログ記憶部12のログメッセージ列42の次行のログメッセージの検索を行う。また、変数mがLines1よりも大きい場合(ステップS123;Yes)は、第1ログ記憶部12のログメッセージ列42のすべての行を検索し終えたとして、処理をステップS151へ移行する。ステップS151~S153の処理については後述する。
【0038】
[後イベントに出現しなかった先イベントのログメッセージの処理]
一方、上記したステップS113の処理において、ログメッセージ(Log1(m))とログメッセージ(Log2(x))とが一致した場合(ステップS113;Yes)には、処理をステップS116へ移行する。このステップS116では、ステップS113でログメッセージが一致したときの第2ログ記憶部13のログメッセージ列42の行を指す変数xが、検索を開始した行を指す変数nよりも大きいかを検査する。
【0039】
変数xが変数nよりも大きい場合(ステップS116;Yes)は、一致したログメッセージが発見されるまでに、一致しないログメッセージがあったことを示すため、ログ符号化部14は、一致しないログメッセージを、第1ログ記憶部12には出現しなかったログメッセージとして扱い、マイナス記号(-)を出力する(ステップS141)。次に、変数nに1を加算した(ステップS141)後、処理をステップS116へ戻して、第1ログ記憶部12に出現しなかったログメッセージを処理するループを構成する。
【0040】
[後イベントと先イベントの両方に出現したログメッセージの処理]
変数nが変数x以上の場合(ステップS116;No)、第2ログ記憶部13のLog2(x)は、第1ログ記憶部12のログメッセージ列にも出現したとして、ログ符号化部14は、イコール記号(=)を出力する(ステップS131)。このとき、イコール記号(=)に続けてLog2(x)を記号化した値を付加してもよい。例えば、
図4の第2ログ記憶部13のログメッセージ列42の「ログメッセージA2」の一部である「A2」を付加して、ログメッセージ列52の「=A2」のようにしてもよい。
【0041】
次に、ログ符号化部14は、変数mと変数nのそれぞれに1を加算し(ステップS132)、変数mがLines1より大きいかを検査する(ステップS133)。変数mがLines1より大きい場合(ステップS133;Yes)、すなわち、第1ログ記憶部12のログメッセージ列をすべて処理し終えた場合は、処理をステップS151へ移行する。
【0042】
[次のログメッセージの符号化処理]
また、変数mがLines1以下の場合(ステップS133;No)は、第1ログ記憶部12のログメッセージ列に未処理のログメッセージがあるため、変数nがLines2よりも大きいかを検査する(ステップS134)。変数nがLines2以下の場合(ステップS134;No)、すなわち、第1ログ記憶部12と第2ログ記憶部13の両方に未処理のログメッセージがある場合は、処理をステップS112へ戻して、次の未処理のログメッセージの符号化処理を行う。
【0043】
[先イベントのログメッセージを処理し終えた場合]
一方、変数nがLines2より大きい場合(ステップS134;Yes)、変数mがLines1よりも大きいかを検査する(ステップS161)。変数mがLines1以下の場合(ステップS161;No)、すなわち、第1ログ記憶部12に未処理のログメッセージが残っている場合には、未処理のログメッセージが上記ステップS121と同様に新たに出現したログメッセージであるため、ログ符号化部14は、Log1(m)を出力する(ステップS162)。次に、ログ符号化部14は、変数mに1を加算して(ステップS163)した後、処理をステップS161に戻して、未処理のログメッセージを処理するループを構成する。また、変数mがLines1よりも大きい場合(ステップS161;Yes)は、すべて処理済となるため符号化処理を終了する。
【0044】
[後イベントのログメッセージを処理し終えた場合]
上記したステップS151では、変数nがLines2よりも大きいかを検査する。変数nがLines2以下の場合(ステップS151;No)は、第2ログ記憶部13のログメッセージ列42に未処理の行が残っている。この未処理の行は、第1ログ記憶部12に出現しなかったログメッセージであるため、ログ符号化部14はマイナス記号(-)を出力する(ステップS152)。このとき、マイナス記号に続けてLog2(n)を記号化した値を付加してもよい。例えば、
図4の第2ログ記憶部13のログメッセージ列42の「ログメッセージA6」の一部である「A6」を付加して、ログメッセージ列52の「-A6」のようにしてもよい。
【0045】
次いで、変数nに1を加算した(ステップS153)後、処理をステップS151へ戻して未処理のログメッセージを処理するループを構成する。ステップS151で、変数nがLines2よりも大きい場合(ステップS151;Yes)は、すべて処理済となるため符号化処理を終了する。ここまでの処理は、上記した
図4と
図5の場合に相当する。
【0046】
図9は、イベントの一連のログデータ群と圧縮データ群とを並べて示した図である。イベントAの一連のログデータ群60は、イベントAの実行によって生成されたログデータを実行順に並べたものである。一方、イベントAの圧縮データ群70は、ログ出力装置10で圧縮された圧縮データを該イベントの実行順に並べたものである。本実施形態では、ログ出力装置10は、第1ログ記憶部12に記憶された最新イベントのログデータ40-1と、第2ログ記憶部13に記憶された直近イベントのログデータ40-2との差分を取って圧縮データ50として順次出力する。このため、圧縮データ50のデータ量をログデータと比べて小さくすることができる。
【0047】
また、最新イベントのログデータ40-1と直近イベントのログデータ40-2とが同一のログメッセージを含む場合、ログ符号化部14は、このログメッセージに対応する行に対して所定の一致記号『=』(イコール記号)と該ログメッセージの符号(例えば『A1』)を出力する。さらに、直近イベントのログデータ40-2に含まれていたログメッセージが最新イベントのログデータ40-1から削除されている場合、ログ符号化部14は、削除された行に対して、所定の記号『-』(マイナス記号)とログメッセージの符号(例えば『A1』)を出力する。このため、圧縮データ50のデータ量の低減を図ることができると共に、記号で示された行の内容を前後の圧縮データ50から読み取ることができる。また、新たに出現したログメッセージは、そのまま出力されるため、前回のイベントからの変化部分を復号化することなく、圧縮データ群70の観察によって、問題箇所の特定を行うことができる。
【0048】
[変形例]
上記した実施形態では、最新イベントのログデータ40-1と直近イベントのログデータ40-2との差分情報からなる圧縮データ50は、追加されたログメッセージを、『func1 処理が開始しました;A1』、『表示処理が正常に行われました;A2』、『OK処理が正常に行われました;A3』などといった文章情報で示していた。この文章情報で示したログメッセージは、内容を理解しやすい反面、文字数が増加することにより、データ量が増大する傾向にある。
【0049】
このため、本変形例では、ログ符号化部14は、圧縮データ50が記録される記録装置30の空き容量に応じて、該圧縮データ50のログメッセージを文章情報、単語情報または文字情報に切り替えて出力可能としている。
【0050】
具体的には、記録装置30の空き容量が50%以上の場合には、上記のように、ログ符号化部14は、圧縮データ50のログメッセージを文章情報で出力する。ログ符号化部14は、記録装置30の空き容量を取得する。また、記録装置30の空き容量が第1の閾値(例えば50%)を下回ると、ログ符号化部14は、圧縮データ50のログメッセージを単語情報で示すようになる。例えば、『func1 処理が開始しました;A1』を『func1開始;A1』や『表示処理が正常に行われました;A2』を『表示正常;A2』、『OK処理が正常に行われました;A3』を『OK正常;A3』といった単語情報で示す。この場合、類似の文字列は出力しないようにする。これにより、ログデータの内容を保持しつつ、データ量の低減を図ることができる。
【0051】
また、記録装置30の空き容量が第1の閾値よりも低い第2の閾値(例えば10%)を下回ると、ログ符号化部14は、圧縮データ50のログメッセージを文字情報で示して更なるデータ削減を行う。この場合、『func1開始;A1』を『A1』や『表示正常;A2』を『A2』、『OK正常;A3』を『A3』といった文字情報(ログメッセージの符号)のみで示す。この場合、文字情報(ログメッセージの符号)だけでは、ログメッセージの内容を理解することができないとも考えられるが、記録装置30の空き容量が突然第2の閾値を下回ることはなく、その前段階に同一の符号を有するログメッセージが表示されているため、文字情報で表示してもログデータの内容を確認することはできる。なお、上記した第1の閾値及び第2の閾値は一例であり、適宜変更することができる。
【0052】
[実施形態2]
図10は、実施形態2に係るログ出力装置の構成を示すブロック図である。
図11は、イベント単位で設けたログ復元部を示すブロック図である。上記した実施形態1に係るログ出力装置10は、最新イベントのログデータと直近イベントのログデータとの差分情報を圧縮データ50として記録装置30に順次出力する構成としたが、実施形態2では、さらに記録装置30に記憶された圧縮データ50をログデータに復元するログ復元部85を備えている。上記した実施形態1と同一の構成については同一の符号を付して説明を省略する。
【0053】
図10に示すように、ログ出力装置100には、上記したアプリケーション装置20、記録装置30に加えて、出力装置90が接続されている。この出力装置90は、後述するログ復元部85によって復元(復号化)されたログデータを出力するためのものであり、例えば、コンピュータのディスプレイ装置や印刷装置を含む。また、出力装置90として、記録装置30とは別個の記録装置に出力して記録してもよい。
【0054】
ログ出力装置100は、圧縮データ50をログデータに復元するログ復元部85を備える。ログ復元部85は、ファイル取得部80と、ログ差分情報取得部81と、ログ差分記憶部82と、ログ情報記憶部83と、ログ復号化部(ログデータ出力部)84とを備える。ファイル取得部80は、記録装置30に記録されたログファイルを取得する。ログ差分情報取得部81は、ログファイルから圧縮データ(ログ記録情報)を順次取得する。この圧縮データは、時間的に先に実行された先イベントのログデータと、この先イベントと同じイベントであって、該イベントの後(次)に実行された後イベントのログデータとの差分情報である。ログ差分記憶部82は、ログ差分情報取得部81が取得した圧縮データを記憶する。ログ情報記憶部83は、ログ復号化部84で復元された先イベントのログデータが記憶される。ログ復号化部84は、ログ情報記憶部83に記憶された先イベントのログデータと、ログ差分記憶部82に記憶された圧縮データとから後イベントのログデータを復元する。
【0055】
本実施形態においても、ログ出力装置100は、上記したGUIを備えたアプリケーション(プログラム)に組み込まれるログ出力モジュールである。このため、ログ復元部85を構成するファイル取得部80、ログ差分情報取得部81、ログ差分記憶部82、ログ情報記憶部83、及びログ復号化部84は、上記したログ情報取得部11、第1ログ記憶部12、第2ログ記憶部13、ログ符号化部14及びファイル出力部15と同様にプログラム(ソフトウェア)で構成されている。また、ログ出力装置100は、プログラムに限るものではなく、ログ出力装置10と同様に、マイクロプロセッサまたはマイクロコンピュータなどのハードウェアで構成されていてもよい。さらに、プログラム(ソフトウェア)とハードウェアとを組み合わせて構成してもよい。
【0056】
また、ログ復元部85は、
図11に示すように、イベント単位ごとに2系統のモジュールが実装されている。このため、ファイル取得部80が取得したログファイルは、2系統に分けられ、ログ差分情報取得部81A、ログ差分記憶部82A、ログ情報記憶部83A、及びログ復号化部84Aは、イベントAのログファイルの復元処理を実行し、ログ差分情報取得部81B、ログ差分記憶部82B、ログ情報記憶部83B、及びログ復号化部84Bは、イベントBのログファイルの復元処理を実行する。
【0057】
次に、実施形態2に係るログ出力装置100のログ復元部85の動作について説明する。このログ復元部85は、イベントAのログファイルを復元する場合を例示し、ログ復元部85の構成要素は単にログ差分情報取得部81、ログ差分記憶部82、ログ情報記憶部83、及びログ復号化部84と表記する。
図12~
図15は、先イベントのログデータと圧縮データとから後イベントのログデータを復元する動作を説明するための図である。これらの
図12~
図15において、圧縮データ110は、ヘッダラベル111とログ差分メッセージ列112とを備えて構成される。ヘッダラベル111は、圧縮データ110のイベントの種類を示す。また、ヘッダラベル111は、圧縮データ110がログデータのそのまま(Raw Data)であるか、差分情報(Differential Data)であるかを示す。すなわち、ヘッダラベル111のイベントA(R)は、イベントAのログデータがそのまま出力されている(Raw Dataである)ことを示し、イベントA(D)は、時間的に先に実行された先イベントAのログデータと、このイベントの時間的に直後に実行された後イベントAのログデータとの差分情報(Differential Data)であることを示している。
【0058】
イベントAの圧縮データを最初に取得した場合、
図12に示すように、ログ差分情報取得部81から出力された圧縮データ110がログ差分記憶部82に記憶される。この時点では、ログ情報記憶部83には、ログデータ(先イベントのログデータ120-1)が記憶されていない(NULL)。最初に取得される圧縮データ110は、ログデータ(Raw Data)であるため、ログ復号化部84は、ログ差分記憶部82に記憶された圧縮データ110を後イベントのログデータ120-2として、そのまま出力する。その後、ログ復号化部84は、
図13に示すように、圧縮データ110を先イベントのログデータ120-1として、ログ情報記憶部83に記憶する。
【0059】
後イベントのログデータ120-2を出力した後、
図13及び
図14に示すように、ログ差分記憶部82には、次の圧縮データ110が入力される。このため、ログ復号化部84は、新たに入力されたログ差分記憶部82の圧縮データ110と、ログ情報記憶部83に記憶された先イベントのログデータ120-1とを一体化(マージ)により復元し、後イベントのログデータ120-2として出力する。そして、この復元したログデータをログ情報記憶部83に移動し、先イベントのログデータ120-1としてログ情報記憶部83に記憶する。
【0060】
また、データ量の大きさによっては、圧縮(符号化)する際に、ログデータ(Raw Data)がそのまま圧縮データとして出力されることもある。このため、ログ復号化部84は、
図15に示すように、ログ差分記憶部82に入力された圧縮データ110のヘッダラベル111を監視し、ログデータ(Raw Data)であれば、このログデータ(Raw Data)をそのまま後イベントのログデータ120-2として出力する。
【0061】
次に、ログ復号化部84の復号化処理動作について説明する。
図16及び
図17は、ログデータの復号化処理の手順を示すフローチャートである。この復号化処理は、ログファイルから該当するイベントが一回実行される度に出力される一連のログ差分情報を抽出してログ差分記憶部82に記憶された後に開始される。
【0062】
はじめに、
図16のフローチャートに示すように、ログ復号化部84は、ヘッダラベルを出力して(ステップS201)出力装置90に入力される。出力されたヘッダラベルは、同時にログ情報記憶部83にも入力されるが、一回のイベントの全ログデータの復号化が完了するまでは、ログ情報記憶部83にそれまで記憶されていたデータが保持され、入力されたヘッダラベルは一時的に別途ログメッセージ列として記憶される。ヘッダラベルは、例えば、上記したヘッダラベル121のようにイベント名と、イベントの回数、すなわち一連の復号化が実行された回数を記載する。
【0063】
次に、ログ差分記憶部82に記憶されたヘッダラベル111により復号化処理を切り替える(ステップS202)。ヘッダラベル111でイベント名に付加された記号が(R)、すなわち、イベントの実行時に出力されたログメッセージがそのまま記録されている(Raw Data)場合(ステップS202;Yes)には、ログ差分メッセージ列112の行数(Lines3)が0であるかを検査する(ステップS203)。Lines3が0であった場合(ステップS203;Yes)には処理を終了する。この場合、当該イベントの実行時にログメッセージが出力されなかったことを意味する。
【0064】
一方、Lines3が0以外の場合(ステップS203;No)は、ログ復号化部84は、差分メッセージ列112の行位置を指す変数pに1を設定する(ステップS204)。次に、ログ復号化部84は、ログ差分記憶部82のログ差分メッセージ列112のp行目のログメッセージ(Def(p))を出力して(ステップS205)、出力装置90に入力する。出力されたログメッセージ(Def(p))は、同時にログ情報記憶部83にも入力されるが、上記したヘッダラベルの後に追加されて一時的に別途ログメッセージ列に記憶される。
【0065】
次に、ログ復号化部84は、変数pに1を加えた(ステップS206)後、変数pがLines3よりも大きいかを検査する(ステップS207)。変数pがLines3以下の場合(ステップS207;No)は、処理をステップS205へ戻して、ログメッセージ(Def(p))の出力を繰り返すループを構成する。一方、変数pがLines3よりも大きい場合(ステップS207;Yes)は処理を終了する。これにより、一回のイベントの全ログデータの復号化が完了するため、ログ情報記憶部83に一時的に記憶されていた別途ログメッセージ列で、ログ情報記憶部83の内容が上書き更新される。ここまでの処理は、上記した
図12と
図15の場合に相当する。
【0066】
一方、ログ差分記憶部82に記憶されたヘッダラベル111のイベント名に付加された記号がRaw Data(R)でない場合(ステップS202;No)には、
図17に示す復号化の処理に遷移する。
【0067】
図17の処理では、はじめに、ログ差分メッセージ列112の行位置を指す変数pを1に設定し、復号化されたログメッセージ列122の行位置を指す変数qを1に設定する(ステップS211)。続いて、ログ復号化部84は、ログ差分メッセージ列112のp行目の記号化された差分データDef(p)がマイナス記号(-)を含むかを検査する(ステップS212)。マイナス記号(-)を含む場合(ステップS212;Yes)、ログ復号化部84は、変数qに1を加算した(ステップS216)後、変数pに1を加算する(ステップS217)。これは、差分データDef(p)がマイナス記号(-)を含む場合には、ログ情報記憶部83に記憶されている先イベントのログメッセージが、後イベントには存在しないことを意味するため、ログ復号化部84は何も出力することなく、参照する行位置pとqを1行先に進めるものである。
【0068】
一方、差分データDef(p)がマイナス記号(-)を含まなかった場合(ステップS212;No)は、ログ復号化部84は、差分データDef(p)がイコール記号(=)を含むかを検査する(ステップS213)。イコール記号(=)を含む場合(ステップS213;Yes)、ログ情報記憶部83に記憶されているq行目のログメッセージ(Log(q))をログ復号化部84から出力して(ステップS214)、出力装置90に入力する。出力されたログメッセージ(Log(q))は、同時にログ情報記憶部83にも入力されるが、一時的に記憶された別途ログメッセージ列に追加される。この後、上記したステップS216、ステップS217を経て参照する行位置pとqを1行先に進める。
【0069】
また、差分データDef(p)がイコール記号(=)を含まなかった場合(ステップS213;No)、差分データDef(p)は、ログメッセージそのものであるので、ログ復号化部84はDef(p)を出力装置90に出力する(ステップS216)。出力されたDef(p)は、同時にログ情報記憶部83にも入力されるが、一時的に記憶された別途ログメッセージ列に追加される。この場合は、先イベントには存在しない後イベントで新たに出現したログメッセージであるため、処理をステップS217に移行して、ログ差分メッセージ列112の行位置を指す変数pのみに1を加算する。
【0070】
最後に、変数pがログ差分メッセージ列112の行数Lines3より大きいかを検査する(ステップS218)。変数pがLines3以下の場合(ステップS218;No)は、処理をステップ212へ戻して復号化を繰り返すループを構成する。変数pがLines3よりも大きい場合(ステップS218;Yes)は、ログ差分メッセージ列112をすべて復号化したため処理を終了する。これにより、一回のイベントの全ログデータの復号化が完了するため、ログ情報記憶部83に一時的に記憶されていた別途ログメッセージ列で、ログ情報記憶部83の内容が上書き更新される。ここまでの処理は、
図13と
図14の場合に相当する。
【0071】
図18は、記録装置のファイルに保存される圧縮データ群と、復元されたイベントAの一連のログデータ群とを並べて示した図である。記録装置のファイルに保存される圧縮データ群130は、複数のイベントの実行順にログデータを圧縮したものであり、イベントAだけでなくイベントBの圧縮データも含まれている。本実施形態では、イベントBの圧縮データは、イベントB用のログ復元部で復元される。また、復元されたイベントAの一連のログデータ群140は、イベントAのログデータがイベントの実行順に復元される。このため、復元されたイベントAのログデータ群に他の種類のイベント(イベントB)のログデータが混在することはなく、容易にログデータの復元をすることができる。
【0072】
以上、本発明の実施形態について説明したが、本発明は、上記実施形態に限定されるものではない。
【符号の説明】
【0073】
10、100 ログ出力装置
11、11A、11B ログ情報取得部
12、12A、12B 第1ログ記憶部(記憶部)
13、13A、13B 第2ログ記憶部(記憶部)
14、14A、14B ログ符号化部(ログ情報出力部)
15 ファイル出力部
21 操作部
22 Aボタン
23 Bボタン
30 記録装置
40-1 ログデータ(最新イベントのログデータ)
40-2 ログデータ(直近イベントのログデータ)
50 圧縮データ(差分情報、ログ記録情報)
80 ファイル取得部
81、81A、81B ログ差分情報取得部
82、82A、82B ログ差分記憶部
83、83A、83B ログ情報記憶部
84、84A、84B ログ復号化部(ログデータ出力部)
85 ログ復元部
110 圧縮データ(差分情報、ログ記録情報)
120-1 ログデータ(先イベントのログデータ)
120-2 ログデータ(後イベントのログデータ)