(57)【要約】【課題】組み込み系などでログ領域が制限されている場合であっても、ログローテーションとログの取得が重複して実行されること無く、ログファイルの整合性がとれている状態を維持することができるログローテーション制御装置およびログローテーション制御プログラムを提供することを目的とする。【解決手段】組み込み機器は、ローテーション条件を満たしているかを確認し、当該ローテーション条件を満たしていた場合には第２識別子の値を書き換え、過去ログファイルの個数を確認し、過去ログファイルの個数が最大数であった場合には過去ログファイルを１つ削除し、残った過去ログファイルをリネームし、ロック状態を“占有”に書き換え、現行のログを圧縮して過去ファイルに格納し、現行ログファイルを削除し、ロック状態を“解放”に書き換え、第１識別子の値および第２識別子の値を書き換える。【選択図】        図５
2009223404.tif 000002
【特許請求の範囲】
【請求項１】
ログのローテーション処理を実行するログローテーション手段と前記ログの取得処理を実行するログ取得手段とを備えたログローテーション制御装置であって、
前記ログローテーション手段および前記ログ取得手段を排他制御すること
を特徴とするログローテーション制御装置。
【請求項２】
前記ローテーション処理の開始および終了を識別するための識別子および前記ローテーション処理中であるか否かを識別するための識別子からなるローテーション形跡ファイルを記録する記録手段をさらに備え、
前記ログ取得手段が前記取得処理を実行している際、前記ログローテーション手段が前記ローテーション処理を実行しているか否かを前記記録手段で記録している前記ローテーション形跡ファイルを用いて監視し、当該監視において前記ログローテーション手段が前記ローテーション処理を実行していると検知した場合には前記取得処理をキャンセルさせるよう前記ログ取得手段を制御すること
を特徴とする請求項１に記載のログローテーション制御装置。
【請求項３】
前記記録手段は、前記ローテーション形跡ファイルの代わりに、前記ログのロック状態を管理するログロックファイルを記録し、
前記ログ取得手段が前記取得処理を実行している際、前記ログローテーション手段が前記ローテーション処理を実行しているか否かを前記記録手段で記録している前記ログロックファイルを用いて監視し、当該監視において前記ログローテーション手段が前記ローテーション処理を実行していると検知した場合には前記取得処理をキャンセルさせるよう前記ログ取得手段を制御すること
を特徴とする請求項２に記載のログローテーション制御装置。
【請求項４】
ログのローテーション処理を実行するログローテーション手段と前記ログの取得処理を実行するログ取得手段とを備えたログローテーション制御装置に実行させるためのログローテーション制御プログラムであって、
前記ローテーション制御装置に、前記ログローテーション手段および前記ログ取得手段を排他制御させること
を特徴とするログローテーション制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ログローテーション制御装置およびログローテーション制御プログラムに関する。
【背景技術】
【０００２】
Ｌｉｎｕｘや商用ＵＮＩＸ（登録商標）では、ログのローテーション機能が標準で搭載される（例えば“ｓｙｓｌｏｇ”や“ｎｅｗｓｙｓｌｏｇ”の仕様参照）。当該ローテーションにより、ログは圧縮されて世代管理されるが、ある世代を超えたログは削除される。そのため、ログを定期的に取得（バックアップ、保管）することが必要となる。そこで、通常は、当該ローテーションと当該取得とをそれぞれ定時に毎日実行するなど、当該ローテーションと当該取得とが重複しないように設計される。
【０００３】
ここで、関連する従来技術としては、例えば特許文献１、特許文献２および特許文献３が挙げられる。特許文献１には、ロックファイルの使用が許される時のみ共通ファイルへのアクセスが許可されるファイルアクセス排他制御方式に関する技術が開示されている。特許文献２には、オフライン処理の実行時間帯を設定し、処理要求を区分けするオンライン排他ウェイト回避装置に関する技術が開示されている。特許文献３には、操作性を改善すると共に、障害原因特定のために有効なログを収集するログ収集装置、ログ収集プログラムおよび画像形成装置に関する技術が開示されている。
【０００４】
しかし、上記技術はログ領域が十分確保された環境を想定したものであるので、組み込み系などでログ領域が制限されている場合には、定期的にログローテーションを行うだけでなく、あるログ量に達した時点でログローテーションを行う必要がある。
【０００５】
【特許文献１】特開昭６１−１９４５４８号公報
【特許文献２】特許第３６４１３４１号公報
【特許文献３】特開２００６−９９７４５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、このような従来のやり方では、ログローテーションとログの取得が重複して実行される可能性があり、その結果、ログファイルの整合がとれなくなる可能性があるという問題点があった。
【０００７】
本発明は、上記問題点に鑑みてなされたものであって、組み込み系などでログ領域が制限されている場合であっても、ログローテーションとログの取得が重複して実行されること無く、ログファイルの整合性がとれている状態を維持することができるログローテーション制御装置およびログローテーション制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するために、本発明は、ログのローテーション処理を実行するログローテーション手段と前記ログの取得処理を実行するログ取得手段とを備えたログローテーション制御装置であって、前記ログローテーション手段および前記ログ取得手段を排他制御することを特徴とする。
【０００９】
また、本発明は、前記に記載の発明において、前記ローテーション処理の開始および終了を識別するための識別子および前記ローテーション処理中であるか否かを識別するための識別子からなるローテーション形跡ファイルを記録する記録手段をさらに備え、前記ログ取得手段が前記取得処理を実行している際、前記ログローテーション手段が前記ローテーション処理を実行しているか否かを前記記録手段で記録している前記ローテーション形跡ファイルを用いて監視し、当該監視において前記ログローテーション手段が前記ローテーション処理を実行していると検知した場合には前記取得処理をキャンセルさせるよう前記ログ取得手段を制御することを特徴とする。
【００１０】
また、本発明は、前記に記載の発明において、前記記録手段は、前記ローテーション形跡ファイルの代わりに、前記ログのロック状態を管理するログロックファイルを記録し、前記ログ取得手段が前記取得処理を実行している際、前記ログローテーション手段が前記ローテーション処理を実行しているか否かを前記記録手段で記録している前記ログロックファイルを用いて監視し、当該監視において前記ログローテーション手段が前記ローテーション処理を実行していると検知した場合には前記取得処理をキャンセルさせるよう前記ログ取得手段を制御することを特徴とする。
【００１１】
また、本発明は、ログのローテーション処理を実行するログローテーション手段と前記ログの取得処理を実行するログ取得手段とを備えたログローテーション制御装置に実行させるためのログローテーション制御プログラムであって、前記ローテーション制御装置に、前記ログローテーション手段および前記ログ取得手段を排他制御させることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、ローテーション処理を実行するログローテーション手段と取得処理を実行するログ取得手段とを排他制御する。これにより、組み込み系などでログ領域が制限されている場合であっても、ログのローテーションとログの取得が重複して実行されること無く、その結果、ログファイルの整合性がとれている状態を維持することができるという効果を奏する。
【００１３】
また、本発明によれば、ログ取得手段が取得処理を実行している際、ログローテーション手段がローテーション処理を実行しているか否かを記録手段で記録しているローテーション形跡ファイルを用いて監視し、当該監視においてログローテーション手段がローテーション処理を実行していると検知した場合には取得処理をキャンセルさせるようログ取得手段を制御する。これにより、ログのローテーションが実行されているか否かを当該ローテーションの最短実行時間以下の間隔で監視することができ、その結果、ログの取得中に発生したローテーションを確実に検知することができるという効果を奏する。
【００１４】
また、本発明によれば、ログ取得手段が取得処理を実行している際、ログローテーション手段がローテーション処理を実行しているか否かを記録手段で記録しているログロックファイルを用いて監視し、当該監視においてログローテーション手段がローテーション処理を実行していると検知した場合には取得処理をキャンセルさせるようログ取得手段を制御する。これにより、ログの取得に時間を要する場合であっても、ログのローテーションを長時間待機させずに実行することができ、その結果、ログの記録を漏れなく実行することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１５】
以下に、添付図面を参照して、本発明にかかるログローテーション制御装置およびログローテーション制御プログラムの最良な実施の形態を詳細に説明する。なお、本発明は当該実施の形態により限定されるものではない。
【００１６】
［１．本実施の形態の構成］
ここでは、本実施の形態にかかる組み込み機器１００の構成について図１を参照して詳細に説明する。図１は、組み込み機器１００の構成を示す図である。
【００１７】
組み込み機器１００は、具体的にはデジタル複合機（ＭＦＰ）であり（以下では、組み込み機器１００をＭＦＰ１００と記す場合がある。）、外部記憶装置２００と通信可能に接続されている。外部記憶装置２００は、具体的にはＭＦＰ１００と通信可能に接続されたサーバのＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＭＦＰ１００外部に設けられたＳＤ（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）カードなどであり、ログ等を格納する記録領域２０２を備えている。ＭＦＰ１００は、ログのローテーションを優先させる仕組みを実現するためのものであり、大別して、アプリケーション部１０２とログ記録部１０４とログローテーション部１０６とログ取得部１０８と記録部１１０とで構成されている。
【００１８】
アプリケーション部１０２は、ＭＦＰ１００を動作させる実行プログラム（本発明にかかるログローテーション制御プログラムを含む）を含んで構成されている。アプリケーション部１０２は、ログ記録部１０４へログの記録要求を出したり、ログ取得部１０８へログの取得要求を出したりする。
【００１９】
ログ記録部１０４は、アプリケーション部１０２から記録要求されたログを所定のフォーマットに合わせて整形し、整形したログを記録部１１０の現行ログファイル１１０ａに格納する。
【００２０】
ログローテーション部１０６は、規定のログローテーション条件を監視し、当該規定のログローテーション条件を満たした場合にはログ（具体的には記録部１１０に格納されているログファイル）のローテーションを実行する。なお、ログローテーション部１０６は、ローテーション条件のチェックを、ログの記録回数で行ってもよい。これにより、ログ容量の超過を正確に検知することができる。また、ログローテーション部１０６は、ローテーション条件のチェックを、スレッドを立てて監視してもよい。これにより、当該チェックの回数を減らすことができ、その結果、処理を高速化することができる。
【００２１】
ログ取得部１０８は、アプリケーション部１０２からの取得要求を受け、アプリケーション部１０２から取得要求されたログを記録部１１０から取得し（読み出し）、取得したログを外部記憶装置２００の記録領域２０２に格納する（書き出す）。
【００２２】
記録部１１０は、大別して、現行ログファイル１１０ａと、予め定めた最大数Ｎ以下の個数の過去ログファイル１１０ｂ０〜１１０ｂｎ（ｎは１以上Ｎ−１以下の整数である。）と、現行ログロックファイル１１０ｃと、ログローテーション形跡ファイル１１０ｄと、で構成されている。
【００２３】
現行ログファイル１１０ａは、現在記録要求されたログ（具体的にはログ記録部１０４から送られてきたログ）を格納する。過去ログファイル１１０ｂ０〜１１０ｂｎはそれぞれ、ローテーションされた過去のログを格納する。現行ログロックファイル１１０ｃは、現行ログファイル１１０ａのロック状態（例えばセマフォ変数など）を格納する。
【００２４】
ログローテーション形跡ファイル１１０ｄは、例えば数値や文字列や時刻などで表されるログローテーションの実行状態を格納する。具体的には、ログローテーション形跡ファイル１１０ｄは、ローテーションの開始と終了とを互いに異なる値で識別するための識別子（以下では第１識別子と記す場合がある。）の値およびローテーション中であるか否かを識別するための識別子（以下では第２識別子と記す場合がある。）の値を格納する。このように、２つの識別子を別々の種類の情報として用いることで、ログローテーションの実行状態を他者に解析され難くすることができたり、当該２つの識別子の効率のよい組み合わせを選ぶことができたりする。
【００２５】
ここで、第１識別子の値として、例えば図２に示すような互いに異なる数種類の値ｘ１，ｘ２，ｘ３，ｘ４，ｘ５，・・・を用意する。そして、用意したこれらの値を変動させることで、ローテーションの開始と終了をローテーションごとに区別可能に検知する。なお、第１識別子の値は、例えば数値でもよく、ファイル名などの文字列でもよく、時刻でもよい。第１識別子として数値を用いる場合、例えば第１識別子の初期値を“０”とし、１回目のローテーション終了時に第１識別子の値を“１”とし、２回目のローテーション終了時に第１識別子の値を“２”とするといった感じで、ローテーション終了時に第１識別子の値を１ずつインクリメントしてもよい。第１識別子として文字列を用いる場合、例えば第１識別子の初期値を“ａ”とし、１回目のローテーション終了時に第１識別子の値を“ｂ”とし、２回目のローテーション終了時に第１識別子の値を“ｃ”とする（なお、第１識別子の値を示すアルファベットが“ｚ”に辿り着いた後はその値を例えば“ａａ”，“ａｂ”，・・・などとする。）といった感じで、第１識別子の値を示すアルファベットをローテーション終了時に次のアルファベットに変更してもよい。第１識別子としてファイル名を用いる場合、ローテーション形跡ファイル１１０ｄのファイル名を利用してもよい。例えば、ファイル名に数字や文字などを混ぜ合わせたもの（例えば“ｒｏｔａｔｉｏｎ０．ｆｉｌｅ”や“ｒｏｔａｔｉｏｎ１．ｆｉｌｅ”など）を、第１識別子の値としてもよい。第１識別子として時刻を用いる場合、ローテーション形跡ファイル１１０ｄの更新時刻などを利用してもよい。例えば、ローテーション終了時に、第１識別子の値として当該終了時の時刻を設定してもよい。
【００２６】
また、第２識別子の値として、例えば図２に示すような互いに異なる最低２種類の値ｙ１およびｙ２を用意する。なお、第２識別子の値は、第１識別子と同様に数値や文字列や時刻でもよく、またフラグでもよい。第２識別子として数値を用いる場合、ローテーション開始時に第２識別子の値として奇数を設定し、ローテーション終了時に第２識別子の値として偶数を設定してもよい。第２識別子として文字列を用いる場合、ローテーション開始時に第２識別子の値として大文字のアルファベットを設定し、ローテーション終了時に第２識別子の値として小文字のアルファベットを設定してもよい。第２識別子としてファイル名を用いる場合、ローテーション形跡ファイル１１０ｄのファイル名を利用してもよい。例えば、ファイル名に数字や文字などを混ぜ合わせたもの（例えば“ｒｏｔａｔｉｏｎ０．ｆｉｌｅ”や“ｒｏｔａｔｉｏｎ１．ｆｉｌｅ”など）をローテーション開始時およびローテーション終了時に第２識別子の値として設定してもよい。第２識別子として時刻を用いる場合、ローテーション形跡ファイル１１０ｄの更新時刻などを利用してもよい。例えば、ローテーション開始時に第２識別子の値として当該開始時の時刻を設定し、予め決めた基準時刻をローテーション終了時に第２識別子の値として設定してもよい。第２識別子としてフラグを用いる場合、予め決めた２値の一方をローテーション開始時に第２識別子の値として設定し、もう一方をローテーション終了時に第２識別子の値として設定してもよい。例えば、第２識別子の値を、ローテーションの開始時に“ｔｒｕｅ”と設定し、ローテーションの終了時に“ｆａｌｓｅ”と設定してもよい。
【００２７】
なお、例えばログ取得部１０８がログの取得を開始する時にローテーション実行中である場合や、ログ取得部１０８がログの取得を実行している際にローテーションの定期チェックがローテーション実行中に発生した場合は、第２識別子の値で検知する。また、例えばログ取得部１０８がログの取得を実行している際であってローテーションの定期チェック間隔中にローテーションが発生または完了した場合は、第１識別子の値で検知する。
【００２８】
ここで、上述した第１識別子および第２識別子を、図３に示す第３識別子のように１つにまとめてもよい。これにより、ローテーションの定期チェックを１種類の識別子で行うことができ、当該チェックを高速に実行することができる。
【００２９】
なお、第３識別子の値として、例えば図３に示すような互いに異なる数種類の値ｚ１，ｚ２，ｚ３，ｚ４，ｚ５，・・・を用意する。ここで、第３識別子の値は、第１識別子や第２識別子と同様に数値や文字列や時刻でもよい。第３識別子の値として数値を用いる場合、例えば、第３識別子の値として、初回のローテーションにおいては、ローテーション開始前を“０”に、ローテーション中を“−１”に、そしてローテーション終了時を“１”に設定してもよい。そして、第３識別子の値として、次回以降のローテーションにおいては、ローテーション中を“−１”で固定したまま、ローテーション開始時を“−１”に、そしてローテーション終了時を“２”に設定してもよい。つまり、第３識別子の値は、次回以降のローテーションにおいてはローテーション中を“−１”で固定したまま、ローテーション開始時および終了時をそれぞれ１ずつインクリメントしてもよい。なお、このような値の設定の仕方は、ローテーション形跡ファイル１１０ｄの中を読み書きするので計算コストが若干かかるものの、直感的に理解し易い。第３識別子の値としてファイル名などの文字列を用いる場合、例えばファイル名に上述した数値を付与したものを、第３識別子の値として設定してもよい。例えばファイル名に“ｒｏｔａｔｅ＿０”や“ｒｏｔａｔｅ＿１”などを付与したものを、第３識別子の値として設定してもよい。なお、このような値の設定の仕方は、ファイル名が変わると、チェックする計算コストが余計にかかるものの、直感的に理解し易い。第３識別子の値として時刻を用いる場合、例えば、ローテーション開始前、第３識別子の値として、初回のローテーションの場合は現時刻を設定し、次回以降のローテーション場合は前回のローテーションが終了した時刻を設定してもよい。そして、ローテーション中、第３識別子の値として、あり得ない規定時刻（例えば１９８０年１月１日など）を設定してもよい。そして、ローテーション終了時、第３識別子の値として、当該ローテーションが終了した時刻を設定してもよい。なお、このような値の設定の仕方は、多少理解しづらいものの、ファイルの更新時刻（例えばタイムスタンプ“ｍｔｉｍｅ”）のみを参照すればよい（例えば“ＩｎｐｕｔＳｔｒｅａｍ”や“ＯｕｔｐｕｔＳｔｒｅａｍ”などをオープンする必要がない）ので計算速度を高めることができる。
【００３０】
以上説明したように、ＭＦＰ１００によれば、当該ＭＦＰ１００内にログ取得部１０８を持つことで、当該ＭＦＰ１００内のログファイルを外部記憶装置２００に転送することができる。また、ＭＦＰ１００によれば、現行ログロックファイル１１０ｃとローテーション形跡ファイル１１０ｄとを持つことで、ログファイルの排他制御およびローテーションを優先させる仕組みを実現することができる。
【００３１】
［２．本実施の形態の処理］
ここでは、本実施の形態にかかるＭＦＰ１００が行うログ記録処理、ログローテーション処理およびログ取得処理について、図４から図６を参照して詳細に説明する。
【００３２】
まずは、ローテーションを優先させるログ記録処理について図４を参照して詳細に説明する。図４はログ記録処理の一例を示すフローチャートである。
【００３３】
まず、アプリケーション部１０２は、ログの記録要求をログ記録部１０４に出す（ステップＳＡ−１）。
【００３４】
つぎに、ログ記録部１０４は、ステップＳＡ−１で出した記録要求を受けると、生成されているログのフォーマットを整える（ステップＳＡ−２）。
【００３５】
つぎに、ログ記録部１０４は、現行ログロックファイル１１０ｃに格納されている現行ログファイル１１０ａのロック状態を確認する（ステップＳＡ−３）。
【００３６】
つぎに、ログ記録部１０４は、ステップＳＡ−３での確認の結果、ロック状態が“占有”であった場合（ステップＳＡ−４：Ｙｅｓ）には、一定時間待機し（ステップＳＡ−５）、ステップＳＡ−３の処理を再び実行する。
【００３７】
つぎに、ログ記録部１０４は、ステップＳＡ−３での確認の結果、ロック状態が“占有”でなかった場合（ステップＳＡ−４：Ｎｏ）には、ステップＳＡ−２でフォーマットを整えたログを現行ログファイル１１０ａに格納する。
【００３８】
これにて、ログ記録処理の説明を終了する。
【００３９】
つぎに、ローテーションを優先させるログローテーション処理について図５を参照して詳細に説明する。図５はログローテーション処理の一例を示すフローチャートである。
【００４０】
まず、ログローテーション部１０６は、規定のローテーション条件を満たしているかを確認する（ステップＳＢ−１）。具体的には、ログローテーション部１０６は、ログ記録部１０４でのログの記録を所定回数実行する度に、記録部１１０に格納されているファイルのサイズ（容量）をチェックする。このようなチェックの仕方により、一回のログ記録量がわかるため、規定ファイルサイズを超える確率を低くすることができる。また、具体的には、ログローテーション部１０６は、記録部１１０に格納されているファイルのサイズをチェックするスレッドを立てることで、当該サイズを定期的にチェックする。このようなチェックの仕方により、当該チェックの仕方を実現するための何らかの処理がログの毎回の記録ごとに入るわけではないので、チェックの頻度次第では処理速度を高めることができる。
【００４１】
つぎに、ログローテーション部１０６は、ステップＳＢ−１での確認の結果が“満たしている”というものでなかった場合（ステップＳＢ−２：Ｎｏ）には、ステップＳＢ−１の処理を再び実行する。
【００４２】
つぎに、ログローテーション部１０６は、ステップＳＢ−１での確認の結果が“満たしている”というものであった場合（ステップＳＢ−２：Ｙｅｓ）には、ローテーション形跡ファイル１１０ｄに格納されている第２識別子の値を、ある規定値に書き換える（ステップＳＢ−３）。
【００４３】
つぎに、ログローテーション部１０６は、記録部１１０に格納されている過去ログファイルの個数を確認する（ステップＳＢ−４）。
【００４４】
つぎに、ログローテーション部１０６は、ステップＳＢ−４での確認の結果、過去ログファイルの個数が最大数Ｎであった、具体的には記録部１１０に過去ログファイル１１０ｂ０から過去ログファイル１１０ｂＮ−１があった場合（ステップＳＢ−５：Ｙｅｓ）には、当該過去ログファイル１１０ｂＮ−１を削除する（ステップＳＢ−６）。
【００４５】
つぎに、ログローテーション部１０６は、ステップＳＢ−６で過去ログファイル１１０ｂＮ−１を削除した後に記録部１１０に残されている過去ログファイル１１０ｂ０，１１０ｂ１，・・・，１１０ｂＮ−２の名称をそれぞれ順に、過去ログファイル１１０ｂ１，１１０ｂ２，・・・，１１０ｂＮ−１にリネームする（ステップＳＢ−７）。
【００４６】
つぎに、ログローテーション部１０６は、現行ログロックファイル１１０ｃに格納されている現行ログファイル１１０ａのロック状態を“占有”に書き換える（ステップＳＢ−８）。
【００４７】
つぎに、ログローテーション部１０６は、現行ログファイル１１０ａに格納されているログを圧縮し、圧縮した後のログを、改めて生成した過去ログファイル１１０ｂ０に格納する（ステップＳＢ−９）。
【００４８】
つぎに、ログローテーション部１０６は、現行ログファイル１１０ａを削除する（ステップＳＢ−１０）。
【００４９】
つぎに、ログローテーション部１０６は、現行ログロックファイル１１０ｃに格納されている現行ログファイル１１０ａのロック状態を“解放”に書き換える（ステップＳＢ−１１）。
【００５０】
つぎに、ログローテーション部１０６は、ローテーション形跡ファイル１１０ｄに格納されている第１識別子の値および第２識別子の値を書き換える（ステップＳＢ−１２）。
【００５１】
これにて、ログローテーション処理の説明を終了する。
【００５２】
つぎに、ローテーションを優先させるログ取得処理について図６を参照して詳細に説明する。図６はログ取得処理の一例を示すフローチャートである。
【００５３】
まず、アプリケーション部１０２は、ログの取得要求をログ取得部１０８に出す（ステップＳＣ−１）。
【００５４】
つぎに、ログ取得部１０８は、ステップＳＣ−１で出した取得要求を受けると、ローテーション形跡ファイル１１０ｄに格納されている第２識別子の値が、ある規定値であるかを確認する（ステップＳＣ−２）。
【００５５】
つぎに、ログ取得部１０８は、ステップＳＣ−２での確認の結果が“ある規定値である”というものでなかった場合（ステップＳＣ−３：Ｎｏ）には、ローテーション形跡ファイル１１０ｄに格納されている第１識別子の値を一時保持する（ステップＳＣ−４）。なお、ログ取得部１０８は、ステップＳＣ−２での確認の結果が“ある規定値である”というものであった場合（ステップＳＣ−３：Ｙｅｓ）には、ログの取得をキャンセルすべく本ログ取得処理を終了する。
【００５６】
つぎに、ログ取得部１０８は、ステップＳＣ−１で取得要求されたログの１つを、記録部１１０に格納されている過去ログファイルから読み出す（ステップＳＣ−５）。
【００５７】
つぎに、ログ取得部１０８は、ステップＳＣ−５で読み出したログを、外部記憶装置２００の記録領域２０２に書き出す（ステップＳＣ−６）。
【００５８】
つぎに、ログ取得部１０８は、ステップＳＣ−１で取得要求された全てのログを、外部記憶装置２００の記録領域２０２に書き出したかを確認する（ステップＳＣ−７）。
【００５９】
つぎに、ログ取得部１０８は、ステップＳＣ−７での確認の結果が“全て書き出した”というものでなかった場合（ステップＳＣ−８：Ｎｏ）には、現時点のローテーション形跡ファイル１１０ｄに格納されている第２識別子の値が、ある規定値であるかを確認する（ステップＳＣ−９）。なお、ログ取得部１０８は、ステップＳＣ−７での確認の結果が“全て書き出した”というものであった場合（ステップＳＣ−８：Ｙｅｓ）には、ステップＳＣ−９からステップＳＣ−１２までの処理を実行後、ログの取得をキャンセルすべく本ログ取得処理を終了する。
【００６０】
つぎに、ログ取得部１０８は、ステップＳＣ−９での確認の結果が“ある規定値である”というものでなかった場合（ステップＳＣ−１０：Ｎｏ）には、現時点のローテーション形式ファイル１１０ｄに格納されている第１識別子の値とステップＳＣ−４で一時保持していた値とが違うかを確認する（ステップＳＣ−１１）。なお、ログ取得部１０８は、ステップＳＣ−９での確認の結果が“ある規定値である”というものであった場合（ステップＳＣ−１０：Ｙｅｓ）には、ログの取得をキャンセルすべく本ログ取得処理を終了する。
【００６１】
つぎに、ログ取得部１０８は、ステップＳＣ−１１での確認の結果が“違う”というものでなかった場合（ステップＳＣ−１２：Ｎｏ）には、ステップＳＣ−５の処理に戻り、“違う”というものであった場合（ステップＳＣ−１２：Ｙｅｓ）には、ログの取得をキャンセルすべく本ログ取得処理を終了する。
【００６２】
これにて、ログ取得処理の説明を終了する。
【００６３】
［３．本実施の形態のまとめ、及び他の実施の形態］
以上説明したように、ＭＦＰ１００によれば、ログのフォーマットを整え、ロック状態が“占有”であった場合には一定時間待機し、ロック状態が“占有”でなかった場合にはフォーマットを整えたログを現行ログファイル１１０ａに格納する。
【００６４】
また、ＭＦＰ１００によれば、規定のローテーション条件を満たしているかを確認し、その確認の結果が“満たしている”というものであった場合には第２識別子の値を書き換える。そして、ＭＦＰ１００によれば、過去ログファイルの個数を確認し、その確認の結果、過去ログファイルの個数が最大数Ｎであった場合には最も古い過去ログファイル（過去ログファイル１１０ｂＮ−１）を削除し、削除後に記録部１１０に残っている過去ログファイルをリネームする。そして、ＭＦＰ１００によれば、ロック状態を“占有”に書き換え、現行ログファイル１１０ａに格納されているログを圧縮して過去ログファイル１１０ｂ０に格納し、現行ログファイル１１０ａを削除する。そして、ＭＦＰ１００によれば、ロック状態を“解放”に書き換え、第１識別子の値および第２識別子の値を書き換える。
【００６５】
また、ＭＦＰ１００によれば、第２識別子の値が規定値であるかを確認する。そして、ＭＦＰ１００によれば、その確認の結果が“規定値である”というものでなかった場合には、第１識別子の値を一時保持し、取得要求されたログの１つを過去ログファイルから読み出し、読み出したログを外部記憶装置２００の記録領域２０２に書き出す。そして、ＭＦＰ１００によれば、取得要求された全てのログを、外部記憶装置２００の記録領域２０２に書き出したかを確認する。そして、ＭＦＰ１００によれば、その確認の結果が“全て書き出した”というものでなかった場合には、現時点の第２識別子の値が規定値であるかを確認する。そして、ＭＦＰ１００によれば、その確認の結果が“規定値である”というものでなかった場合には、現時点の第１識別子の値と一時保持していた値とが違うかを確認する。そして、ＭＦＰ１００によれば、その確認の結果が“違う”というものでなかった場合には、ログを読み出す前記処理に戻る。
【００６６】
つまり、ＭＦＰ１００によれば、ログ記録部１０４やログローテーション部１０６、ログ取得部１０８を排他制御することにより、ログのローテーションに関する処理を優先して実行しながらログの記録やログの取得に関する処理を適宜実行する。
【００６７】
これまでは、組み込み系などでログ領域が制限されている場合、ログのローテーションを定期的に行うだけでなく、所定のログ量に達した時点でも行う必要がある。しかし、このようなタイミングでローテーションを行うとなると、ログのローテーションとログの取得とが重複して実行される可能性があり、結果としてログファイルの整合性が取れなくなる虞がある。そこで、本実施の形態にかかるＭＦＰ１００によれば、ログのローテーションとログの取得に排他制御をかけることで、組み込み系などでログ領域が制限されている場合であっても、ログのローテーションとログの取得が重複して実行されること無く、その結果、ログファイルの整合性がとれている状態を維持することができる。
【００６８】
また、ログの取得に時間がかかる場合、単に排他制御をかけるだけでは、ログのローテーションが長時間待機させられて実行できなくなる虞がある。そして、組み込み系などではログ領域が制限されていることから、ログのローテーションが実行できないと、ログを記録することが困難となる（ログの記録漏れが生じる）虞があり、布いてはセキュリティを確保することが困難となる虞がある。そこで、本実施の形態にかかるＭＦＰ１００によれば、ログの取得に時間を要する場合であっても、ログのローテーションを長時間待機させずに実行することができ、その結果、ログの記録を漏れなく実行することができる。
【００６９】
また、ログの取得中には、ログのローテーションが実行されたかを定期的（ある期間ごと）にチェックする必要があるが、このチェックの間隔（換言すると、チェックを実施していない時間）が長いとその間にローテーションが発生し完結する虞がある。また、このチェックの間隔の間にローテーションが発生し完結した場合、生成されたログロックファイルは削除されているので、ローテーションが発生したことを検知することが困難となる。そこで、本実施の形態にかかるＭＦＰ１００によれば、ログのローテーションが実行されているか否かを当該ローテーションの最短実行時間以下の間隔で監視することができ、その結果、ログの取得中に発生したローテーションを確実に検知することができる。
【００７０】
また、本実施の形態にかかるＭＦＰ１００で実行されるログローテーション制御プログラムは、ＲＯＭ等に予め組み込まれて提供される。当該ログローテーション制御プログラムは、上述した各部（少なくともログローテーション部１０６およびログ取得部１０８）を含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵ（プロセッサ）が上記ＲＯＭからログローテーション制御プログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、少なくともログローテーション部１０６およびログ取得部１０８が主記憶装置上に生成されるようになっている。なお、当該ログローテーション制御プログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。また、当該ログローテーション制御プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、当該ログローテーション制御プログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【００７１】
なお、本発明は、本実施の形態で説明したログローテーション機能を有するＭＦＰ１００以外にも、ログローテーション機能を有するシステム全般に応用可能である。
【図面の簡単な説明】
【００７２】
【図１】組み込み機器１００の構成を示す図である。
【図２】ローテーション形跡ファイル１１０ｄに格納される第１識別子および第２識別子の一例を示す図である。
【図３】ローテーション形跡ファイル１１０ｄに格納される第３識別子の一例を示す図である。
【図４】ログ記録処理の一例を示すフローチャートである。
【図５】ログローテーション処理の一例を示すフローチャートである。
【図６】ログ取得処理の一例を示すフローチャートである。
【符号の説明】
【００７３】
１００  組み込み機器（ＭＦＰ）
１０２  アプリケーション部
１０４  ログ記録部
１０６  ログローテーション部
１０８  ログ取得部
１１０  記録部
２００  外部記憶装置
２０２  記録領域
【図１】
2009223404.tif 000003
【図２】
2009223404.tif 000004
【図３】
2009223404.tif 000005
【図４】
2009223404.tif 000006
【図５】
2009223404.tif 000007
【図６】
2009223404.tif 000008