(57)【要約】【課題】  内部バッファが一杯になる場合にもログを欠落することがなく、外部装置が受信したログを生成順に並べることができるように、外部装置にログを出力するログ出力装置を提供する。【解決手段】  制御部１０２が実行するタスクのログを生成順に記録する内部バッファ１１０と、データを外部装置１１６に出力する出力部１０８とを含み、内部バッファにログを記録する空き領域が在る場合、制御部はログを内部バッファに記録し、内部バッファにログを記録する空き領域が無い場合、制御部は、第１のタイムスタンプを内部バッファに出力し、第２のタイムスタンプを出力部から外部装置に出力し、その後のログを出力部から外部装置に出力する。タスクが終了するとき、制御部は第３のタイムスタンプを出力部から外部装置に出力する。これにより、内部バッファが一杯になってもログが欠落することがなく、外部装置は受信したログを生成順に並べることができる。【選択図】図１
2012103936.tif 000002
【特許請求の範囲】
【請求項１】
制御部が実行するタスクによって生成されたログを生成された順に記録するバッファと、
前記バッファに記録されたログを外部装置に出力する出力部とを含み、
生成されたログを記録できるだけの空き領域が前記バッファに在る場合、前記制御部は、生成された該ログを前記バッファに記録し、
生成されたログを記録できるだけの空き領域が前記バッファに無い場合、前記制御部は、生成された該ログを前記出力部から前記外部装置に出力することを特徴とする、ログ出力装置。
【請求項２】
生成されたログを記録できるだけの空き領域が前記バッファに無い場合、前記制御部は、前記バッファに第１のタイムスタンプを記録した後に、生成された前記ログを前記出力部から前記外部装置に出力することを特徴とする、請求項１に記載のログ出力装置。
【請求項３】
生成されたログを記録できるだけの空き領域が前記バッファに無い場合、前記制御部は、前記バッファに前記第１のタイムスタンプを記録した後であって、生成した前記ログを前記出力部から前記外部装置に出力する前に、第２のタイムスタンプを前記出力部から前記外部装置に出力することを特徴とする、請求項２に記載のログ出力装置。
【請求項４】
生成されたログを記録できるだけの空き領域が前記バッファに無い状態で前記タスクを終了する場合、前記制御部は、第３のタイムスタンプを前記出力部から外部装置に出力することを特徴とする、請求項３に記載のログ出力装置。
【請求項５】
生成されたログを記録できるだけの空き領域が前記バッファに在るか否かは、前記第１のタイムスタンプを記録する容量を、前記バッファから除いた残りの容量について判定されることを特徴とする、請求項２から４の何れか１項に記載のログ出力装置。
【請求項６】
前記第１のタイムスタンプ、前記第２のタイムスタンプ及び前記第３のタイムスタンプは、数字及びアルファベットの少なくとも１つを含む文字列である、同じタイムスタンプ名を含み、
前記タイムスタンプ名は、タスク毎に一意であることを特徴とする、請求項４に記載のログ出力装置。
【請求項７】
請求項４に記載のログ出力装置から出力されるログと、前記第１のタイムスタンプ、前記第２のタイムスタンプ及び前記第３のタイムスタンプとを受信して、前記ログ出力装置から出力された順にログ情報として記録する外部装置において、前記ログを生成された順に並べ替える方法であって、
記録された前記ログ情報の中から前記第１のタイムスタンプ、前記第２のタイムスタンプ及び前記第３のタイムスタンプを検索する検索ステップと、
前記第２のタイムスタンプ及び前記第３のタイムスタンプの間のログを、前記第１のタイムスタンプの次に移動させる移動ステップと含むことを特徴とする、ログの並べ替え方法。
【請求項８】
前記第１のタイムスタンプ、前記第２のタイムスタンプ及び前記第３のタイムスタンプは、数字及びアルファベットの少なくとも１つを含む文字列である、同じタイムスタンプ名を含み、
前記タイムスタンプ名はタスク毎に一意であり、
前記検索ステップは、記録された前記ログ情報の中から３つの同じタイムスタンプ名を検索するステップであり、
前記移動ステップは、検索された３つの前記タイムスタンプ名のうち、第１番目のタイムスタンプ名及び第２番目のタイムスタンプ名の間のログを、第３番目のタイムスタンプ名の次に移動するステップであることを特徴とする、請求項７に記載のログの並べ替え方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ等において実行されるプログラムの実行状態を表すログを出力するログ出力装置、及び、それから出力されたログを並べ替える方法に関する。
【背景技術】
【０００２】
コンピュータ上で実行されるプログラムの実行状態を記録するためのログ出力装置が知られている。ログ出力装置によって記録されたログは、プログラムの正常実行を妨げる原因が発生しているか否か、又はプログラムが意図したとおりに動作しているか否か等を調べるために用いられる。従って、プログラムにトラブルが発生した場合に、その原因を究明すること、又は開発中のプログラムの動作確認を行なうこと等が可能となる。
【０００３】
従来、ログ出力装置は、ログ出力によるＣＰＵ負荷を抑えるため、所定容量の内部バッファを備えている。例えば、ログが生じた場合、ＣＰＵは、まずログを発生順に内部バッファに書き込む。その後、ＣＰＵは、処理が空いたとき（優先的に実行すべき処理が無いとき）に、その時点で内部バッファに保存されているログデータを外部装置等にシリアル出力する。ＣＰＵが内部バッファのログデータを外部装置に出力した後に、内部バッファはクリアされ、内部バッファにログが記録可能になる。
【０００４】
下記特許文献１には、ログデータを記憶する技術が開示されている。特許文献１に記載の発明では、イベントのログを記憶するときに、イベントの発生時刻をタイムスタンプとしてバッファに記録する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−５１５１７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来のログ出力装置では、ＣＰＵに処理の空き時間ができ、内部バッファのデータの出力が可能になるまでの間に内部バッファがオーバーフローした場合、その後に生成されたログは内部バッファに書き込まれない。従って、外部装置には一部が欠落したログが出力される問題がある。
【０００７】
上記の特許文献１に開示された発明によっても、この問題を解決することはできない。
【０００８】
従って、本発明は、内部バッファが一杯になる場合にもログを欠落することなく外部装置に出力することができ、且つ、外部装置が受信したログを発生順に並べ替えることができるように、外部装置にログを出力することができるログ出力装置及びその出力ログの並べ替え方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記の目的は、下記によって達成することができる。
【００１０】
即ち、本発明に係るログ出力装置は、制御部が実行するタスクによって生成されたログを生成された順に記録するバッファと、バッファに記録されたログを外部装置に出力する出力部とを含み、生成されたログを記録できるだけの空き領域がバッファに在る場合、制御部は、生成されたログをバッファに記録し、生成されたログを記録できるだけの空き領域がバッファに無い場合、制御部は、生成されたログを出力部から外部装置に出力する。
【００１１】
好ましくは、制御部は、生成されたログを記録できるだけの空き領域がバッファに無い場合、バッファに第１のタイムスタンプを記録した後に、生成されたログを出力部から外部装置に出力する。
【００１２】
より好ましくは、制御部は、生成されたログを記録できるだけの空き領域がバッファに無い場合、バッファに第１のタイムスタンプを記録した後であって、生成したログを出力部から外部装置に出力する前に、第２のタイムスタンプを出力部から外部装置に出力する。
【００１３】
さらに好ましくは、制御部は、生成されたログを記録できるだけの空き領域がバッファに無い状態でタスクを終了する場合、第３のタイムスタンプを出力部から外部装置に出力する。
【００１４】
好ましくは、生成されたログを記録できるだけの空き領域がバッファに在るか否かは、第１のタイムスタンプを記録する容量を、バッファから除いた残りの容量について判定される。
【００１５】
より好ましくは、第１のタイムスタンプ、第２のタイムスタンプ及び第３のタイムスタンプは、数字及びアルファベットの少なくとも１つを含む文字列である、同じタイムスタンプ名を含み、タイムスタンプ名は、タスク毎に一意である。
【００１６】
また、本発明に係るログの並べ替え方法は、上記のログ出力装置から出力されるログと、第１のタイムスタンプ、第２のタイムスタンプ及び第３のタイムスタンプとを受信して、ログ出力装置から出力された順にログ情報として記録する外部装置において、ログを生成された順に並べ替える方法であって、記録されたログ情報の中から第１のタイムスタンプ、第２のタイムスタンプ及び第３のタイムスタンプを検索する検索ステップと、第２のタイムスタンプ及び第３のタイムスタンプの間のログを、第１のタイムスタンプの次に移動させる移動ステップと含む。
【００１７】
好ましくは、第１のタイムスタンプ、第２のタイムスタンプ及び第３のタイムスタンプは、数字及びアルファベットの少なくとも１つを含む文字列である、同じタイムスタンプ名を含み、タイムスタンプ名はタスク毎に一意であり、検索ステップは、記録されたログ情報の中から３つの同じタイムスタンプ名を検索するステップであり、移動ステップは、検索された３つのタイムスタンプ名のうち、第１番目のタイムスタンプ名及び第２番目のタイムスタンプ名の間のログを、第３番目のタイムスタンプ名の次に移動するステップである。
【発明の効果】
【００１８】
本発明によれば、ログ出力装置は、内部バッファが一杯になるときには、ログを内部バッファに出力せずに外部装置に直接出力するので、ログが欠落することがない。
【００１９】
また、内部バッファが一杯になるときに、内部バッファにタイムスタンプを出力し、外部装置への直接のログ出力を終了する前に、外部装置にタイムスタンプを出力するので、外部装置は、受信したログを発生順に並べ替えることができる。さらに、外部装置への直接のログ出力を開始する前にも、外部装置にタイムスタンプを出力することで、より確実に外部装置は、受信したログを発生順に並べ替えることができる。
【００２０】
また、タイムスタンプがタイムスタンプ名を含み、タイムスタンプ名としてタスク毎に一意の名前を使用することにより、より容易に外部装置は、受信したログを発生順に並べ替えることができる。
【図面の簡単な説明】
【００２１】
【図１】本発明の実施の形態に係るログ出力装置の概略構成を示すブロック図である。
【図２】図１に示した内部バッファの構成を示すブロック図である。
【図３】本発明の実施の形態に係るログ出力装置においてログを出力する処理を実現するためのプログラムの制御構造を示すフローチャートである。
【図４】本発明の実施の形態に係るログ出力装置から出力され、外部装置によって受信されたログ及びタイムスタンプの一例を示す図である。
【図５】本発明の実施の形態に係るログ出力装置から出力され、外部装置によって受信されたログ及びタイムスタンプの別の例を示す図である。
【図６】外部装置が受信したログを発生順に並べ替えるプログラムの制御構造を示すフローチャートである。
【図７】外部装置において発生順に並べ替えられたログを示す図である。
【発明を実施するための形態】
【００２２】
以下の実施の形態では、同一の部品には同一の参照番号を付してある。それらの名称及び機能も同一である。従って、それらについての詳細な説明は繰返さない。
【００２３】
図１を参照して、本発明の実施の形態に係るログ出力装置１００は、制御部１０２、メモリ部１０４、記録部１０６、出力部１０８、内部バッファ１１０、タイマ１１２及びバス１１４を備えている。
【００２４】
制御部１０２は、例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）であり、ログ出力装置１００全体を制御する。メモリ部１０４は、データを一時的に記憶する記憶装置であり、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。記録部１０６は、電源がオフされた状態でもデータを恒常的に記録する不揮発性の記憶装置であり、例えばハードディスクドライブ等であり、制御部１０２が実行するプログラムをも記録している。制御部１０２は、記録部１０６から適宜実行すべきプログラム及びデータをメモリ部１０４に読み出して、メモリ部１０４の一部をワークエリアとして使用して処理を行なう。処理途中のデータ及び処理結果のデータは、適宜記録部１０６に記録される。出力部１０８は、例えばＵＡＲＴ（Ｕｎｉｖｅｒｓａｌ  Ａｓｙｎｃｈｒｏｎｏｕｓ  Ｒｅｃｅｉｖｅｒ  Ｔｒａｎｓｍｉｔｔｅｒ）であり、外部装置１１６にデータを出力する。ＵＡＲＴは、調歩同期方式によるシリアル信号をパラレル信号に変換する、又は、その逆方向の変換を行なう。内部バッファ１１０は、入力されるデータを入力順に記憶する。内部バッファ１１０は、図２に示したように、ログを記録するログ記録領域１４０とタイムスタンプを記録するタイムスタンプ記録領域１４２とから構成されている。制御部１０２による各部の制御および各部間のデータ（制御データを含む）交換は、バス１１４を介して行なわれる。
【００２５】
ログ出力装置１００は、デジタル複合機（ＭＦＰ：Ｍｕｌｔｉｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌｓ）等の種々の装置に組み込まれて使用される。制御部１０２は、ログ出力装置１００が組み込まれる装置のＣＰＵであっても、別のＣＰＵであってもよい。外部装置１１６は、ログ出力装置１００が組み込まれる装置とは別の装置である場合も、ログが組み込まれる同じ装置に組み込まれる場合もある。
【００２６】
上記のように構成されたログ出力装置１００のログ出力動作について、図３を参照して説明する。制御部１０２がログを生成するタスクを「タスク１」とし、制御部１０２が、内部バッファ１１０から外部装置１１６にログを出力するタスクを「タスク２」とする。制御部１０２はシングルタスクでプログラムを実行するので、タスク１が終了した後にタスク２が動作可能となる。なお、以下において、タスクが実行する動作は、実際には制御部１０２がプログラムを実行することによって実現される。
【００２７】
図３のステップ２００において、制御部１０２がタスク１を開始する。
【００２８】
ステップ２０２において、タスク１がログを生成して内部バッファ１１０に出力する。ログは、内部バッファ１１０に入力された順に、ログ記録領域１４０に記録される。
【００２９】
ステップ２０４において、タスク１は、内部バッファ１１０が一杯であるか否か、即ちログ記録領域１４０に、生成したログを記録できるだけの空き領域が在るか否かを判定する。ログのデータサイズは固定であっても、可変であってもよい。内部バッファ１１０が一杯であると判定した場合、ステップ２０８に移行し、そうでなければステップ２０６に移行する。
【００３０】
ステップ２０６において、タスク１が終了するか否かを判定する。終了しないと判定すれば、ステップ２０２に戻り、ステップ２０２及び２０４の処理を繰返す。終了すると判定した場合、ステップ２２０に移行する。
【００３１】
ステップ２０８において、タスク１が内部バッファ１１０にタイムスタンプを出力する。具体的には、タイマ１１２から現在時刻を取得して、これに所定の名前を付して、内部バッファ１１０のタイムスタンプ記録領域１４２に記録する。タイムスタンプ記録領域１４２には、例えば、ＴＳ（１）Ｔｉｍｅ（１）が記録される（図４参照）。ＴＳ（１）はタイムスタンプ名であり、Ｔｉｍｅ（１）は時刻を表すデータである。
【００３２】
ステップ２１０において、タスク１はログの出力先を内部バッファ１１０から出力部１０８に変更する。
【００３３】
ステップ２１２において、タスク１はタイムスタンプを外部装置１１６に出力する。即ち、タイマ１１２から現在時刻を取得して、ステップ２０８と同様にタイムスタンプを生成し、出力部１０８を介して外部装置１１６に出力する。このとき、タイムスタンプ名には、ステップ２０８で使用した名前と同じものを使用する。例えば、タイムスタンプはＴＳ（１）Ｔｉｍｅ（２）となる。Ｔｉｍｅ（２）は上記のＴｉｍｅ（１）と異なる時刻を表すデータである。外部装置１１６は、受信したタイムスタンプを記録する。
【００３４】
ステップ２１４において、タスク１が終了するか否かを判定する。終了しないと判定すれば、ステップ２１６に移行し、終了すると判定した場合、ステップ２１８に移行する。
【００３５】
ステップ２１６において、タスク１は、出力部１０８を介してログを外部装置１１６に出力し、ステップ２１４に戻る。これによって、タスク１が終了するまで、ログは内部バッファ１１０ではなく、外部装置１１６に出力される。外部装置１１６は、受信したログを、出力部１０８から出力された順に記録する。
【００３６】
なお、出力部１０８と外部装置１１６とが直接接続される場合には、外部装置１１６はデータを受信した順に記録すれば、出力部１０８から出力された順に記録したことになる。しかし、出力部１０８と外部装置１１６とがネットワークを介して接続される場合には、外部装置がデータを受信する順序は、必ずしも出力部１０８から出力された順序と同じではない。その場合、出力部１０８から出力されるデータには、公知の方法によって、出力順序を表す情報が付される。外部装置１１６は、出力順序を表す情報を用いて、ログを出力順に記録することができる。
【００３７】
ステップ２１８において、タスク１が、ステップ２１２と同様にタイムスタンプを外部装置１１６に出力する。このとき、タイムスタンプ名には、ステップ２０８及びステップ２１２で使用した名前と同じものを使用する。例えば、タイムスタンプはＴＳ（１）Ｔｉｍｅ（３）となる。Ｔｉｍｅ（３）は上記のＴｉｍｅ（１）及びＴｉｍｅ（２）とは異なる時刻を表すデータである。
【００３８】
ステップ２２０において、タスク１を終了し、ステップ２２２において、タスク２を開始する。
【００３９】
ステップ２２４において、内部バッファ１１０のログ記録領域１４０及びタイムスタンプ記録領域１４２のデータを、記録された順序を維持したまま外部装置１１６に出力し、タスク２は終了する。
【００４０】
なお、ログを生成する別のタスクが動作を開始する場合には、上記と同様の処理が実行される。但し、タイムスタンプ名は、タスク１が使用したタイムスタンプ名と異なるものを使用する。即ち、内部バッファ１１０が一杯になったとき、一意のタイムスタンプ名が決定され（ステップ２０８）、そのタイムスタンプ名が、内部バッファ１１０のデータを外部装置１１６に出力するまで（ステップ２２４）、使用されなければならない。このことは、後述するように、外部装置１１６が、受信したログを生成された順に並べるために必要である。
【００４１】
以上のように、タスク１は、内部バッファ１１０のログ記録領域１４０にログを記録できる空き領域がある間は、内部バッファ１１０にログを記録し、ログを記録できるだけの空き領域が無くなれば、ログの出力先を外部装置１１６に変更する。タスク１は、ログの出力先を外部装置１１６に変更する直前に、タイムスタンプを内部バッファ１１０に出力し、ログの出力先を外部装置１１６に変更した直後に、タイムスタンプを外部装置１１６に出力する。その後、タスク１は、ログを外部装置１１６に直接出力する。これにより、外部装置１１６には図４に示すようなログ及びタイムスタンプ（以下「ログ情報」ともいう）が記録される。
【００４２】
図４において、下方が時間軸の正方向である。即ち、データが出力部１０８から出力された時刻は、ＴＳ（１）Ｔｉｍｅ（２）が最も早く、Ｌｏｇ（５）が最も遅い。具体的には、先頭のＴＳ（１）Ｔｉｍｅ（２）は図３のステップ２１２で出力され、Ｌｏｇ（３）はステップ２１４で出力され、ＴＳ（１）Ｔｉｍｅ（３）はステップ２１８で出力されたデータである。参照番号３００で示した領域のＬｏｇ（１）、Ｌｏｇ（２）及びＴＳ（１）Ｔｉｍｅ（１）は、内部バッファ１１０に記録されていたデータであって、ステップ２２４で出力されたデータである。Ｌｏｇ（４）及びＬｏｇ（５）は、タスク１及びタスク２とは別のタスク３が、タスク２が終了した後に起動して生成し、内部バッファ１１０に一旦記録され、制御部１０２の処理の空き時間に外部装置１１６に出力されたログである。
【００４３】
内部バッファ１１０のログ記録領域１４０が、ｎ個のログを記録できる場合の例を示す。タスク１が、ｎ個のログ（Ｌｏｇ（１）〜Ｌｏｇ（ｎ））を生成し、内部バッファ１１０が一杯になった後、タスク１はｍ個のログ（Ｌｏｇ（ｎ＋１）〜Ｌｏｇ（ｎ＋ｍ））を生成したとする。その後、別のタスク３が、ｎ個のログ（Ｌｏｇ（ｎ＋ｍ＋１）〜Ｌｏｇ（２ｎ＋ｍ））を生成し、内部バッファ１１０が一杯になった後、タスク３はｋ個のログ（Ｌｏｇ（２ｎ＋ｍ＋１）〜Ｌｏｇ（２ｎ＋ｍ＋ｋ））を生成したとする。そのような場合、外部装置１１６がログ出力装置１００から受信したデータは、図５のようになる。図５においても、下方が時間軸の正方向である。
【００４４】
図５では、タスク１が最初に生成したｎ個のログ（Ｌｏｇ（１）〜Ｌｏｇ（ｎ））は、参照番号３２２の領域に示されている。内部バッファ１１０が一杯になった後にタスク１が生成したｍ個のログ（Ｌｏｇ（ｎ＋１）〜Ｌｏｇ（ｎ＋ｍ））は、参照番号３２０の領域に示されている。同様に、タスク３が生成したｎ個のログ（Ｌｏｇ（ｎ＋ｍ＋１）〜Ｌｏｇ（２ｎ＋ｍ））は、参照番号３２６の領域に示されている。内部バッファ１１０が一杯になった後にタスク３が生成したｋ個のログ（Ｌｏｇ（２ｎ＋ｍ＋１）〜Ｌｏｇ（２ｎ＋ｍ＋ｋ））は、参照番号３２４の領域に示されている。
【００４５】
図４、図５に示したように、外部装置１１６が受信したログは、生成された順に並んでいない。以下に、外部装置１１６が受信したログを生成された順に並べ替える処理について説明する。ここでは、図５に示したログ情報を並べ替える場合を説明する。本プログラムは、外部装置１１６のＣＰＵが実行することとし、タイムスタンプ名がＴＳで始まることが、ログ出力装置１００と外部装置１１６との間で取り決められているとする。
【００４６】
外部装置１１６が受信したログの並べ替えを実現するプログラムのステップ４００において、外部装置１１６が受信したログ情報（ログ及びタイムスタンプ）の先頭からタイムスタンプを検索し、タイムスタンプが在ればステップ４０４に移行し、タイムスタンプが無ければ、本プログラムを終了する。例えば、外部装置１１６のＣＰＵが、受信したログ情報の先頭からＴＳで始まるデータを検索する。タイムスタンプが無い場合とは、内部バッファ１１０が一杯になることが無かった場合である。従って、ログは生成された順に並んでおり、並べ替えは不要である。図５の場合、ＴＳ（１）Ｔｉｍｅ（２）が見つかる。
【００４７】
ステップ４０２において、ステップ４００で見つかったタイムスタンプ名（ＴＳ（１））と同じタイムスタンプ名を検索する。図５では、ＴＳ（１）Ｔｉｍｅ（３）が見つかった後、ＴＳ（１）Ｔｉｍｅ（１）が見つかる。
【００４８】
ステップ４０４において、１番目のタイムスタンプ（ＴＳ（１）Ｔｉｍｅ（２））と２番目のタイムスタンプ（ＴＳ（１）Ｔｉｍｅ（３））で挟まれたログを、１番目のタイムスタンプ（ＴＳ（１）Ｔｉｍｅ（２））及び２番目のタイムスタンプ（ＴＳ（１）Ｔｉｍｅ（３））と共に、順序を維持したまま、３番目のタイムスタンプ（ＴＳ（１）Ｔｉｍｅ（１））の次に移動する。これによって、図７の左側に示したように参照番号３２０及び３２２の領域のデータが交換され、その部分のログが生成された順に並ぶ。
【００４９】
ステップ４０６において、タイムスタンプの検索を開始するデータ位置を、移動したデータの次のデータの位置に設定する。
【００５０】
ステップ４００に戻り、ステップ４０６で設定されたデータ位置からタイムスタンプの検索を行なう。図５の場合、ＴＳ（２）Ｔｉｍｅ（５）が見つかる。以下、同様にして、ステップ４０４において、タイムスタンプ名がＴＳ（２）である１番目のタイムスタンプ（ＴＳ（２）Ｔｉｍｅ（５））と２番目のタイムスタンプ（ＴＳ（２）Ｔｉｍｅ（６））で挟まれたログを、３番目のタイムスタンプ（ＴＳ（２）Ｔｉｍｅ（４））の次に移動する。これによって、図７の右側に示したように参照番号３２４及び３２６の領域のデータが交換され、その部分のログが生成された時刻順に並ぶ。
【００５１】
その後、再度ステップ４００に戻るが、それ以上タイムスタンプが無いので、本プログラムは終了する。以上によって、図７の右側に示すように、全てのログを生成された順に並べることができた。なお、図７では、ログだけではなく、タイムスタンプも含めて全てのデータが、生成された順に並んでいる。
【００５２】
上記ではタイムスタンプとして、タイムスタンプ名と時刻情報とを用いたが、これに限定されない。例えば、タイムスタンプとして、タイムスタンプ名のみを使用してもよい。その場合でも、外部装置１１６において、受信したログを生成された順に並べ替えることができる。また、タイムスタンプとして、時刻情報のみを使用してもよい。その場合、外部装置１１６において、受信したログを生成された順に並べ替えるには、ログ情報の先頭からタイムスタンプ（時刻情報）を検索し、連続して見つけられた３つのタイムスタンプを用いて、上記と同様に並べ替えを行なえばよい。
【００５３】
また、タイムスタンプ名は、数字及びアルファベットの少なくとも１つを含む文字列であればよい。
【００５４】
また、上記では、外部装置１１６は、１つのタスクによる３つのタイムスタンプを含むログ情報を受信することになるが、これに限定されない。外部装置に直接出力されたログを特定でき、且つ、そのログを、内部バッファに一旦記録されてから外部装置に出力されたログの後ろに移動できるように、外部装置が受信したログ情報中にタイムスタンプが含まれていればよい。例えば、内部バッファ１１０が一杯になるまでは常にログを内部バッファ１１０に出力する場合、タイムスタンプを外部装置１１６に出力するステップ２１２は無くてもよい。この場合、例えば図５において、ＴＳ（１）Ｔｉｍｅ（２）及びＴＳ（２）Ｔｉｍｅ（５）が無いデータ列となるが、特定のタイムスタンプとその前にあるログとを、ひとまとめとして移動させればよい。図５においてＴＳ（１）Ｔｉｍｅ（２）及びＴＳ（２）Ｔｉｍｅ（５）が無い場合、Ｌｏｇ（ｎ＋１）〜ＴＳ（１）Ｔｉｍｅ（３）のデータを、ＴＳ（１）Ｔｉｍｅ（１）の次に移動させ、Ｌｏｇ（２ｎ＋ｍ＋１）〜ＴＳ（２）Ｔｉｍｅ（６）のデータを、ＴＳ（２）Ｔｉｍｅ（４）の次に移動させれば、ログを生成された順に並べることができる。また、同様に、内部バッファ１１０が一杯になるまでは常にログを内部バッファ１１０に出力する場合、内部バッファ１１０に最初にログを出力する前に、まずタイムスタンプを内部バッファ１１０に出力するようにすれば、ステップ２１２及び２１８は無くてもよい。この場合、奇数番目のタイムスタンプＴＳ（２ｎ＋１）と、その一つ前のタイムスタンプＴＳ（２ｎ）との間のログは、直接外部装置に出力されたログである。従って、それらをタイムスタンプＴＳ（２ｎ＋２）の次に移動させればよい。但し、ｎ＝０の場合、タイムスタンプＴＳ（０）（０番目のタイムスタンプ）は存在しないので、１番目のタイムスタンプＴＳ（１）の直前のログから先頭のログまでを、タイムスタンプＴＳ（２）の次に移動させる。
【００５５】
また、上記では内部バッファ１１０にタイムスタンプ記録領域１４２を設ける場合を説明したが、内部バッファ１１０の外部にタイムスタンプ記録領域１４２を設けてもよい。
【００５６】
なお、タイムスタンプ名を一意に決定するには種々の方法を使用することができる。例えば、使用されたタイムスタンプ名を、メモリ部１０４又は記録部１０６に保存しておけばよい。この場合、あるタスクが最初にタイムスタンプ名を生成するとき、保存されているタイムスタンプ名と重複しないように、新たなタイムスタンプ名を決定することができる。また、タイムスタンプ名を、所定の文字（例えば、ＴＳ）と数字とで構成することとし、タスクがタイムスタンプ名を生成した後に、数字部分のみを上書き保存するようにすればよい。この場合、タイムスタンプ名に使用された最後の数字が保存されているので、タスクがタイムスタンプ名を生成するとき、記録されている数字を参照し、それよりも所定数（例えば“１”）だけ大きい数字を所定の文字列に付加することで、タイムスタンプ名を一意に決定することができる。
【００５７】
以上、実施の形態を説明することにより本発明を説明したが、上記した実施の形態は例示であって、本発明は上記した実施の形態に限定されるものではなく、種々変更して実施することができる。
【符号の説明】
【００５８】
１００  ログ出力装置
１０２  制御部
１０４  メモリ部
１０６  記録部
１０８  出力部
１１０  内部バッファ
１１２  タイマ
１１４  バス
１１６  外部装置
【図１】
2012103936.tif 000003
【図２】
2012103936.tif 000004
【図３】
2012103936.tif 000005
【図４】
2012103936.tif 000006
【図５】
2012103936.tif 000007
【図６】
2012103936.tif 000008
【図７】
2012103936.tif 000009