(57)【要約】【課題】  予め定義された日時のフォーマットが無くても、ログレコードにおける日時のフォーマットを特定することができる。【解決手段】  特定装置は、日時を含むログレコードを取得するログ取得部と、前記ログレコードの更新日時を取得する更新日時取得部と、前記取得した更新日時に基づいて、前記ログレコードにおける日時の出現位置を特定する日時位置特定部と、前記日時の出現位置に基づいて、前記ログレコードの日時のフォーマットを特定するフォーマット特定部を備える。【選択図】  図１４
2018005363.tif 000002
【特許請求の範囲】
【請求項１】
日時を含むログレコードを取得するログ取得部と、
前記ログレコードの更新日時を取得する更新日時取得部と、
前記取得した更新日時に基づいて、前記ログレコードにおける日時の出現位置を特定する日時位置特定部と、
前記日時の出現位置に基づいて、前記ログレコードの日時のフォーマットを特定するフォーマット特定部を備える、特定装置。
【請求項２】
前記更新日時取得部は、前記ログレコードの更新日時を、
ファイルから前記ログレコードを取得した場合、前記ファイルが更新された日時とし、あるいは、ネットワークを介して前記ログレコードを受信した場合、前記ログレコードを受信した日時を前記ログレコードの更新日時とする、
請求項１に記載の特定装置。
【請求項３】
前記日時位置特定部は、
少なくとも空白又は記号の少なくとも１つによって、前記ログレコードを構成する文字列を分割して複数の文字列を生成し、
前記生成された複数の文字列ごとに、前記更新日時の日付、時刻との一致を特定し、前記ログレコードにおける前記日時の出現位置を特定する、請求項１又は２に記載の特定装置。
【請求項４】
前記日時位置特定部は、
時刻を表記するための時刻記号を用いて前記ログレコードの文字列を分割し、前記ログレコードにおける時刻の出現位置を特定する時刻位置特定部を備える、
請求項１から３のいずれか１つに記載の特定装置。
【請求項５】
前記日時位置特定部は、
日付を表記するための日付記号を用いて前記ログレコードの文字列を分割し、前記ログレコードにおける日付の出現位置を特定する日付位置特定部を備える、
請求項１から３のいずれか１つに記載の特定装置。
【請求項６】
前記日時位置特定部は、
前記日時のうちの日付および時刻の少なくとも一方が連続して表記される連続表記の出現位置を特定する連続表記位置特定部を、更に備える、
請求項１から５のいずれか１つに記載の特定装置。
【請求項７】
前記更新日時の日時をシフトさせ、前記ログレコードにおける前記日時の出現位置を特定する遅延解析部を、更に備える、
請求項１から６のいずれか１つに記載の特定装置。
【請求項８】
日時を含むログレコードを取得し、
前記ログレコードの更新日時を取得し、
前記取得した更新日時に基づいて、前記ログレコードにおける日時の出現位置を特定し、
前記特定された日時の出現位置に基づいて、前記ログレコードの日時のフォーマットを特定する、特定方法。
【請求項９】
日時を含むログレコードを取得し、
前記ログレコードの更新日時を取得し、
前記取得した更新日時に基づいて、前記ログレコードにおける日時の出現位置を特定し、
前記特定された日時の出現位置に基づいて、前記ログレコードの日時のフォーマットを特定する、ことをコンピュータに実行させる特定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ログレコードにおける日時のフォーマットを特定する特定装置等に関する。
【背景技術】
【０００２】
特許文献１には、ログフォーマットを管理する管理部と、ログフォーマットを参照してログを変換し、時刻情報を抽出する変換部を備えるログ管理装置が記載されている。ログフォーマットには対象のログファイルの格納位置、時刻情報の表記位置および日時についての正規表現が含まれている。
【０００３】
特許文献２には、抽出情報群のフォーマットについて記述されたルール情報を読み出し、ルール情報に記述されたログフォーマットで抽出情報群を生成する読み出し部を備えるログファイル処理装置が記載されている。対象のシステム、アプリケーション毎に定義された日時情報を有するログファイル処理装置が、ログファイルから日時情報を抽出すると共に、ログファイルの表示形式を変更する。
【０００４】
また、特許文献３には、多種多様なログフォーマットを共通フォーマットに変換するために、必要なログフォーマットを自動生成するログフォーマット変換装置が記載されている。また、ログフォーマット変換装置には、ログファイルに記録されているログの文字列パターンから規則性を抽出してログフォーマットを自動作成することが記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−０７３１２３号公報
【特許文献２】特開２０１４−１６７６９８号公報
【特許文献３】特開２００７−２４９６９４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１、２、３の技術は、日時表記が定義されたフォーマットに基づいて、対象となるログの日時表記の出現位置を特定する、あるいは、正規表現で一致した日時形式に変換する。このため、特許文献１、２、３の技術は、日時表記が異なるログごとに、定義されたフォーマットが必要となる。
【０００７】
本発明の目的は、予め定義された日時のフォーマットが無くても、ログレコードにおける日時のフォーマットを特定することが可能な特定装置等を提供することにある。
【課題を解決するための手段】
【０００８】
本発明の特定装置は、日時を含むログレコードを取得するログ取得部と、前記ログレコードの更新日時を取得する更新日時取得部と前記取得した更新日時に基づいて、前記ログレコードにおける日時の出現位置を特定する日時位置特定部と、前記日時の出現位置に基づいて、前記ログレコードの日時のフォーマットを特定するフォーマット特定部を備える。
【０００９】
本発明の特定方法は、日時を含むログレコードを取得し、前記ログレコードの更新日時を取得し、前記取得した更新日時に基づいて、前記ログレコードにおける日時の出現位置を特定し、前記特定された日時の出現位置に基づいて、前記ログレコードの日時のフォーマットを特定する。
【００１０】
本発明の特定プログラムは、日時を含むログレコードを取得し、前記ログレコードの更新日時を取得し、前記取得した更新日時に基づいて、前記ログレコードにおける日時の出現位置を特定し、前記特定された日時の出現位置に基づいて、前記ログレコードの日時のフォーマットを特定する、ことをコンピュータに実行させる。
【発明の効果】
【００１１】
本発明は、日時のフォーマットの定義が無くても、ログレコードにおける日時のフォーマットを特定することができる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施形態の特定装置の構成を示すブロック図である。
【図２】第１の実施形態の日時位置特定部の構成を示すブロック図である。
【図３】第１の実施形態の特定装置の動作を示すフローチャートである。
【図４】第１の実施形態の第１判定処理の動作を示すフローチャートである。
【図５】第１の実施形態の時刻特定処理の動作を示すフローチャートである。
【図６】第１の実施形態の日付特定処理の動作を説明するログの例である。
【図７】第１の実施形態の状態判定処理の動作を示すフローチャートである。
【図８】第１の実施形態の第２判定処理の動作の一部を示すフローチャートである。
【図９】第１の実施形態の第２判定処理の動作の一部を示すフローチャートである。
【図１０】日時のフォーマットを特定する一例を示す説明図である。
【図１１】日時のフォーマットを特定する一例を示す説明図である。
【図１２】日時のフォーマットを特定する一例を示す説明図である。
【図１３】日時のフォーマットを特定する一例を示す説明図である。
【図１４】第２の実施形態の特定装置の構成を示すブロック図である。
【図１５】第２の実施形態の日時位置特定部の構成を示すブロック図である。
【図１６】第２の実施形態の特定装置の動作を示すフローチャートである。
【図１７】第１、２の実施形態における特定装置１０をコンピュータ装置で実現したハードウエア構成を示すブロック図である。
【発明を実施するための形態】
【００１３】
［第１の実施形態］
本発明の第１の実施形態に係る特定装置について、図面を用いて説明する。
【００１４】
［構成の説明］
図１は、第１の実施形態に係る特定装置の構成を示すブロック図である。図１を参照すると、第１の実施形態に係る特定装置１０は、ログ取得部１１と、更新日時取得部１２と、日時位置特定部１３と、フォーマット特定部１４と、遅延解析部１５を備える。
【００１５】
ログ取得部１１は、ファイル又はネットワークを介してログレコードを取得する。
【００１６】
更新日時取得部１２は、ログレコードの更新日時を取得する。ログレコードの更新日時の一例は、ログレコードを含むファイルが更新された日時、あるいは、ネットワークを介してログレコードを受信した日時である。ここで、日時には、時刻（時、分、秒）の他、日付（年、月、日）が含まれる。
【００１７】
日時位置特定部１３は、更新日時取得部１２が取得した更新日時に基づいて、ログ取得部１１が取得したログレコードの文字列の中から日時の出現位置を特定する。
【００１８】
図２は、日時位置特定部１３の構成を示すブロック図である。図２に示すように、日時位置特定部１３は、時刻位置特定部１３１と、日付位置特定部１３２と、連続表記位置特定部１３３を備える。
【００１９】
時刻位置特定部１３１は、更新日時取得部１２が取得した更新日時に基づいて、ログ取得部１１が取得したログレコードの文字列の中から時刻の出現位置を特定する。日付位置特定部１３２は、更新日時取得部１２が取得した更新日時に基づいて、ログ取得部１１が取得したログレコードの文字列の中から日付の出現位置を特定する。連続表記位置特定部１３３は、更新日時取得部１２が取得した更新日時に基づいて、ログ取得部１１が取得したログレコードの文字列の中から連続して表記された時刻および日付の出現位置を特定する。
【００２０】
フォーマット特定部１４は、時刻位置特定部１３１、日付位置特定部１３２、又は、連続表記位置特定部１３３が時刻および日付の出現位置に基づいて、ログレコードにおける日時のフォーマットを特定する。なお、日時には、年、月、日、時、分、秒が含まれる。
【００２１】
更新日時取得部１２が取得した更新日時は、ログレコードに表記されている日時と比べ遅延が含まれる場合がある。この点を考慮して、遅延解析部１５は、取得した更新日時の日時をシフトさせ、ログ取得部１１が取得したログレコードの文字列の日時の出現位置を特定する。
【００２２】
［動作の説明］
次に、第１の実施形態に係る特定装置の動作について、図面を用いて説明する。図３は、第１の実施形態に係る特定装置の動作を示すフローチャートである。
【００２３】
図３に示すように、ログ取得部１１は、ファイル又はネットワークを介して、ログレコードを取得する（ステップＡ１）。
【００２４】
次に、更新日時取得部１２は、ログレコードの更新日時を取得する（ステップＡ２）。例えば、ログレコードをファイルで取得した場合、更新日時取得部１２は、当該ログレコードを含むファイルを更新した日時を更新日時として取得する。また、ログレコードを、ネットワークを介して取得した場合、更新日時取得部１２は、ログレコードを受信した日時を更新日時として取得する。
【００２５】
日時位置特定部１３は、取得したログレコードに対し、第１前処理を実行する（ステップＡ３）。第１前処理は、ログレコードの文字列に含まれるスペース、タブ等の空白を用いて、ログレコードの文字列を分割する処理である。
【００２６】
例えば、図１０に示すように、第１前処理によって、ログレコード９１は、複数の文字列９３となる。なお、ログレコードの文字列にスペース、又は、タブ等の空白が含まれていない場合は、第１前処理による文字列の分割は行われない。第１前処理において、確定しているフォーマットが存在する場合、その文字列で置換する。
【００２７】
空白で文字列を分割して生成された複数の文字列に対して、日時位置特定部１３は、第１判定処理を実行する（ステップＡ４）。
【００２８】
図４は、第１判定処理の動作を示すフローチャートである。図４に示すように、時刻位置特定部１３１は、複数の文字列の中から１番目の文字列を抽出する（ステップＢ１）。
【００２９】
まず、日時位置特定部１３の時刻位置特定部１３１は、１番目の文字列を時刻記号”：”で分割する（ステップＢ２）。時刻位置特定部１３１は、１番目の文字列を時刻記号で分割した場合、時刻記号で分割された１番目の文字列に対して、時刻を特定する時刻判定処理を実行する（ステップＢ３）。
【００３０】
時刻記号による分割は、例えば、図１０に示すように、複数の文字列９３の２番目の文字列「１４：０１：３９．５４」が文字列９６のように分割されることである。
【００３１】
図５は、時刻判定処理の動作を示すフローチャートである。
【００３２】
時刻位置特定部１３１は、１番目の文字列に対して、時刻区分が含まれるかを判断する（ステップＣ２）。時刻区分は、ＡＭ、ＰＭなど時刻を１２時間制で表す際に使われる表記である。時刻区分は他の表記であってもよい。
【００３３】
時刻位置特定部１３１は、複数の文字列のうち、１番目の文字列が時刻区分を含むかを判定する（ステップＣ２）。時刻区分を含む場合（ステップＣ２のＹｅｓ）、時刻位置特定部１３１は、１番目の文字列における時刻区分を特定する（ステップＣ３）。時刻区分の特定とは、例えば、時刻区分の表記（ＡＭ又はＰＭ）の特定と、時刻区分の出現位置の特定を意味する。時刻位置特定部１３１は、特定された時刻区分の出現位置を記憶部（図示せず）に記憶する。
【００３４】
時刻位置特定部１３１は、文字列の検索位置を時刻区分の出現位置よりも後に設定する。
【００３５】
次に、時刻位置特定部１３１は、時刻区分の次の文字列が、ステップＡ２で更新日時取得部１２が取得した更新日時の時と一致するかを判定する（ステップＣ４）。
【００３６】
更新日時の時と一致しない場合（ステップＣ４のＮｏ）、時刻位置特定部１３１は、取得した更新日時の時間表記を１２時間表記から２４時間表記に変更して、更新日時の時と一致するかを判定する（ステップＣ５）。
【００３７】
更新日時の時と一致しない場合（ステップＣ５のＮｏ）、時刻位置特定部１３１は、時刻を特定する処理を終了し、次の文字列を抽出する。
【００３８】
一方、更新日時の時と一致した場合（ステップＣ４のＹｅｓ、ステップＣ５のＹｅｓ）、時刻位置特定部１３１は、時の出現位置を特定し（ステップＣ６）、記憶部（図示せず）に時の出現位置を記録する。
【００３９】
次に、時刻位置特定部１３１は、次に抽出した文字列が、取得した更新日時の分と一致するかを判定する（ステップＣ７）。
【００４０】
更新日時の分と一致しない場合（ステップＣのＮｏ）、時刻位置特定部１３１は、次の文字列を抽出する（ステップＣ１３）。
【００４１】
一方、更新情報の分と一致する場合、時刻位置特定部１３１は、分の出現位置を特定し（ステップＣ８）、記憶部（図示せず）に分の出現位置を記録する。
【００４２】
時刻位置特定部１３１は、分と特定された文字列に続く文字列が存在するかを判定する（ステップＣ９）。分と特定された文字列に続く文字列が存在しない場合（ステップＣ９のＮｏ）、時刻位置特定部１３１は、次の文字列を抽出する（ステップＣ１３）。次の文字列が抽出できない場合は、ステップＢ３の時刻の特定の処理を終了する。
【００４３】
一方、分と特定された文字列に続く文字列が存在する場合（ステップＣ９のＹｅｓ）、時刻位置特定部１３１は、その文字列を記号で分割する（ステップＣ１０）。ここで記号とは、アルファベット文字と数文字以外を指す。例えば、記号は、“．”あるいは“，”でもよく、秒とミリ秒の境界を区別できれば、他の記号であってもよい。
【００４４】
記号で文字列が分割できる場合（ステップＣ１０のＹｅｓ）、時刻位置特定部１３１は、記号の位置より前の文字列を秒と特定し（ステップＣ１１）、記号よりも後の文字列をミリ秒と特定する。なお、時刻位置特定部１３１は、秒とミリ秒の特定の際に、文字列を数値にしたときの値の範囲のチェックを実行し、秒が０〜５９、又は、ミリ秒が０〜９９９に収まらない場合、秒、又は、ミリ秒と特定せずに、次の文字列を抽出する（ステップＣ１３）。
【００４５】
一方、記号で文字列が分割できない場合（ステップＣ１０のＮｏ）、その文字列を秒と特定する（ステップＣ１２）。但し、文字列を数値にしたときの値が０〜５９に収まらない場合、秒として特定せずに次の文字列の値を取り出す。以上が、図５のステップＢ３における時刻判定処理の動作である。時刻位置特定部１３１は、次の文字列が無くなると時刻判定処理を終了する。
【００４６】
続いて、図４に戻り、ステップＢ３の時刻判定処理の後の動作について説明する。時刻位置特定部１３１は、ステップＢ２，Ｂ３で時刻が特定済みかを判定し（ステップＢ４）、時刻を特定済みの場合（ステップＢ４のＹｅｓ）、特定した時刻を確定する。
【００４７】
時刻が特定済みでない場合、時刻位置特定部１３１は、ログレコードの文字列を記号（アルファベットと数字以外）で分割し（ステップＢ５）、複数の文字列を生成する。
時刻位置特定部１３１は、記号で分割された文字列に対して、ステップＢ６の時刻判定処理を実行する。ステップＢ６の時刻判定処理は、ステップＢ３の時刻判定処理と同様の動作のため、詳細な説明は省略する。
【００４８】
次に、日付位置特定部１３２は、日付記号”／”を用いて文字列を分割する（ステップＢ７）。日付位置特定部１３２は、日付記号で分割された文字列に対して日付特定処理を実行する（ステップＢ８）。
【００４９】
図６は、日付特定処理の動作を示すフローチャートである。図６に示すように、日付位置特定部１３２は、日付記号で分割された文字列から、最初の文字列を抽出する（ステップＤ１）。日付位置特定部１３２は、抽出した文字列が既に時刻として特定済みかを判定する（ステップＤ２）。
【００５０】
時刻として特定済みの場合（ステップＤ２のＹｅｓ）、日付位置特定部１３２は、日付特定処理を終了する。一方、時刻として特定済みでない場合（ステップＤ２のＮｏ）、日付位置特定部１３２は、抽出した文字列が、更新日時の年と一致するかを判定する（ステップＤ３）。
【００５１】
更新日時の年と一致しない場合（ステップＤ３のＮｏ）、日付位置特定部１３２は、抽出した文字列が、更新日時の年の下二桁と一致するかを判定する（ステップＤ４）。年の下二桁とは、例えば、年が「２０１６」の場合「１６」となる。
【００５２】
更新日時の年の下二桁と一致する場合（ステップＤ４のＹｅｓ）、あるいは、更新日時の年と一致する場合（ステップＤ３のＹｅｓ）、日付位置特定部１３２は、抽出した文字列を年と特定し（ステップＤ５）、年の出現位置を記憶部（図示せず）に記録する。
【００５３】
次に、日付位置特定部１３２は、抽出した文字列が、更新日時の月と一致するかを判定する（ステップＤ６）。更新日時の月と一致する場合（ステップＤ６のＹｅｓ）、抽出した文字列を月と特定し（ステップＤ７）、月の出現位置を記憶部に記録する。
【００５４】
月を表記する１〜１２までの数値の他、英語表記の月名を考慮してもよい。英語表記の月名とは、例えば、１月であれば「Ｊａｎｕａｒｙ」、「Ｊａｎ」等である。日付位置特定部１３２は、英語表記の月名を対応する数値に変換した後、更新日時の月との一致を判定する。
【００５５】
次に、日付位置特定部１３２は、抽出した文字列が更新日時の日と一致するかを判定する（ステップＤ８）。抽出した文字列が、更新日時の日と一致する場合（ステップＤ８のＹｅｓ）、その文字列を日として特定し（ステップＤ９）、日の出現位置を記憶部に記憶する。
【００５６】
日付位置特定部１３２は、分割した文字列ごとに、ステップＤ２からステップＤ９までの処理を繰り返す（ステップＤ１０）。
【００５７】
ステップＤ１〜Ｄ１０までの処理の後、日付位置特定部１３２は、特定された月と日がそれぞれ１つずつであるかを判定する（ステップＤ１１）。それぞれ１つの場合（ステップＤ１１のＹｅｓ）、日付位置特定部１３２は、日付特定処理を終了する。
【００５８】
特定された月、又は日が複数ある場合Ｄ１〜Ｄ１０までの処理結果を破棄し（ステップＤ１２）、日付特定処理を終了する。
【００５９】
日付位置特定部１３２は、日付が特定済みかを判定し（ステップＢ９）、日付を特定済みの場合（ステップＢ９のＹｅｓ）、その文字列の日付を特定する。日付を特定済でない場合（ステップＢ９のＮｏ）、再度、文字列を記号（アルファベットと数字以外）で分割する（ステップＢ１０）。
【００６０】
ステップＢ８の日付特定処理と同様、分割された文字列に対して日付判定処理を実行する（ステップＢ１１）。これらについて、全ての文字列に対して繰り返す（ステップＢ１２）。
【００６１】
分割された文字列の判定が終わった後、日時位置特定部１３は、状態判定処理を実行する（ステップＢ１３）。
【００６２】
ステップＢ１３の状態判定処理の動作について、図面を用いて説明する。図７は、状態判定処理の動作を示すフローチャートである。
【００６３】
まず、日時位置特定部１３は、ステップＢ１〜Ｂ１２までの処理の結果、ログレコードの時刻が特定されているかを判定する。時刻が特定済みである、あるいは、更新日時の時刻と一致した文字列が一つの場合（ステップＥ１のＹｅｓ）、日時位置特定部１３は、時刻を確定する（ステップＥ２）。
【００６４】
一方、処理の結果、更新日時の時刻と一致した文字列が複数ある場合（ステップＥ１のＮｏ）、日時位置特定部１３は、ステップＥ３に進む。
【００６５】
日時位置特定部１３は、日付が特定されているか判定する（ステップＥ３）。日付が特定済み、あるいは、更新日時の日付と一致した文字列が一つの場合（ステップＥ３のＹｅｓ）、日時位置特定部１３は、日付を確定する（ステップＥ４）。一方、日付が複数ある場合、日時位置特定部１３は、ステップＥ５に進む。
【００６６】
日時位置特定部１３は、時刻が未定であるかを判定する（ステップＥ５）。時刻が未定でない場合、日時位置特定部１３は、ステップＢ１１３の状態判定処理を終了する。時刻が未定の場合（ステップＥ５のＹｅｓ）、更新日時の時刻と一致する文字列が複数あるうち、確定した日付の文字列を削除する（ステップＥ６）。ステップＥ６で確定した日付を削除した結果、一致した時刻が一つになった場合、日時位置特定部１３は、時刻を確定する（ステップＥ８）。一方、時刻が１つにならなかった場合、日時位置特定部１３は、ステップＥ９に進む。
【００６７】
日時位置特定部１３は、日付が未定かを判定する（ステップＥ９）。日付が未定の場合（ステップＥ９のＹｅｓ）、更新日時の日付と一致した複数の文字列のうち、確定した時刻の文字列を削除する（ステップＥ１０）。ステップＥ１０で確定した時刻を削除した結果、一致した日付が一つになった場合、日時位置特定部１３は、日付を確定する（ステップＥ１２）。
【００６８】
日時位置特定部１３は、日付が確定した場合、ステップＣ５の２４時間制の時刻を判定した場合、もしくは時刻が１２以下の値の場合、確定した時刻の前後の文字列から時刻区分が存在したら、その位置を時刻区分の出現位置として確定する（ステップＢ１４）。
【００６９】
次に、日時位置特定部１３は、ステップＡ４の第１判定処理により、日時の表記文字の出現位置を特定できたかを判定する(ステップＡ５)。日時の表記文字の出現位置を特定できた場合（ステップＡ５のＹｅｓ）、フォーマット特定部１４は、取得したログレコードにおける日時のフォーマットを特定する。
【００７０】
日時を表す表記文字の出現位置を特定できない場合（ステップＡ５のＮｏ）、日時位置特定部１３は、第２前処理を実行する（ステップＡ６）。
【００７１】
第２前処理は、分割方法を変更した文字列の分割処理である。第２前処理は、例えば、時間区分と数字表記の文字列が連続する、あるいは、英語表記の文字列が連続する場合、それらが一つの文字列となるように、文字列を分割する処理である。
【００７２】
日時位置特定部１３は、第２前処理によって分割された文字列に対し、ステップＡ３の第１判定処理と同様な処理を実行する（ステップＡ７）。日時位置特定部１３は、日時の出現位置を特定したかを判定する（ステップＡ８）。なお、ステップＳ７の第１判定処理と、ステップＳ８の日時の出現位置の特定については、それぞれステップＡ４の第１判定処理、ステップＡ５の日時の出現位置の特定と同様であり、詳細な説明は省略する。
【００７３】
ステップＡ７の第１判定処理によって、日時のフォーマットが特定できない場合、日時位置特定部１３は、連続表記を判定する第２判定処理を実行する（ステップＡ９）。
【００７４】
第２判定処理について図８、図９のフローチャートを用いて詳細に説明する。図８は、第２判定処理の動作を示すフローチャートである。
【００７５】
時刻位置特定部１３１は、ステップＡ６の第２前処理によって複数に分割された文字列を順に検索する（ステップＦ１）。更新日時の時と分を結合し、その文字列に結合した時分の表記が含まれるかを検索する（ステップＦ２）。
【００７６】
時分の表記が含まれる場合、時刻位置特定部１３１は、その文字列における時分の位置を記憶する（ステップＦ３）。
【００７７】
その文字列における時分の位置の直後に二桁の数字が存在する場合（ステップＦ４）、時刻位置特定部１３１は、その二桁の数値を「秒」と特定する（ステップＦ５）。
【００７８】
更に、特定された秒の位置の直後に三桁の数字が存在する場合（ステップＦ６）、その数字をミリ秒と特定する（ステップＦ７）。時が文字列の先頭でない場合、検索位置を読み取った文字列の後ろに設定する（ステップＦ８）。
【００７９】
文字列が更新日時の年と一致する場合（ステップＦ９）、その文字列を年と特定する（ステップＦ１０）。更新日時の年と一致しないが、更新日時の年の下二桁と一致する場合（ステップＦ１１）、文字列を年と特定する（ステップＦ１２）。値が設定された場合は、その文字数分、検索位置を移動する。
【００８０】
次の値が月に一致する場合（ステップＦ１３）は、値を月に設定する（ステップＦ１４）。同様に文字数分、検索位置を移動した後、次の値が日に一致する場合（ステップＦ１５）は値を日に設定する（ステップＦ１６）。再度出現位置の判定を行う（ステップＡ１０）。
【００８１】
日付と日時が見つかった場合は出現位置を日時のフォーマットとして扱う。
日付と日時が見つからない場合は、取得した時刻を−１分し、同様に検索を繰り返す。見つからない場合はあらかじめ設定された時刻まで時刻を引き検索を繰り返す。
【００８２】
このログレコードで特定できない場合は次のログレコードを用いて同様の処理を繰り返す。
【００８３】
以下、第１の実施形態の特定装置を用いてログレコードの日時のフォーマットを特定する具体例を説明する。
【００８４】
＜具体例１＞
特定装置１０が、ログレコードから日時のフォーマットを特定する動作について、具体例１を用いて説明する。
【００８５】
図１０に示すように、特定装置１０のログ取得部１１は、ログレコード９１を取得する（ステップＡ１）。ログレコード９１の日時のフォーマットは特定装置１０に予め記憶されていないものとする。
【００８６】
特定装置１０の更新日時取得部１２は、ログレコード９１の取得方法に応じて、ログレコード９１の更新日時９２を取得する（ステップＡ２）。更新日時取得部１２は、取得した更新日時９２を、年、月、日、時、分、秒に分割する。
【００８７】
特定装置１０の日時位置特定部１３は、ログレコード９１を空白で分割し（ステップＡ３）、複数の文字列９３を生成した後、第１判定処理（ステップＡ４）を実行する。
【００８８】
第１判定処理として、日時位置特定部１３の時刻位置特定部１３１は、複数の文字列９３のうち、１番目の文字列「２０１６／０１／２９」を抽出する（ステップＢ１）。抽出された「２０１６／０１／２９」は、時刻記号”：”で分割されず（ステップＢ２）、時刻位置特定部１３１は、文字列９４「２０１６／０１／２９」を生成する。
【００８９】
次に、時刻を特定する処理（ステップＢ３）として、時刻位置特定部１３１は、文字列９４「２０１６／０１／２９」が、時刻区分を含むかを判定する（ステップＣ２）。
文字列９４「２０１６／０１／２９」は、時刻区分を含んでおらず（ステップＣ２のＮｏ）、時刻位置特定部１３１は、文字列９４「２０１６／０１／２９」が、更新日時９２の時刻（時、分、秒等）と一致するかを判定する（ステップＣ４〜Ｃ１３）。
【００９０】
文字列９４「２０１６／０１／２９」が、更新日時９２の時刻と一致しないため、時刻位置特定部１３１は、時刻を特定できない（ステップＢ４のＮｏ）。次に、時刻位置特定部１３１は、文字列９４「２０１６／０１／２９」を記号で分割し、時刻を特定する処理（ステップＢ６）を実行する。分割された文字列には、更新日時の時刻は含まれないため、時刻位置特定部１３１は、文字列９４「２０１６／０１／２９」に対して、時刻を特定できない、
次に、文字列９４「２０１６／０１／２９」に対して、日時位置特定部１３の日付位置特定部１３２は、日付記号“／”で分割し(ステップＢ７)、複数の文字列９５を生成する。
【００９１】
日付位置特定部１３２は、複数の文字列９５ごとにステップＤ２から処理を実行する。
【００９２】
文字列９５の「２０１６」において、時刻は特定されていない（ステップＤ２のＮｏ）ので、日付位置特定部１３２は、「２０１６」に対して、更新日時９２の年「２０１６」と一致するかを判定する（ステップＤ３）。更新日時９２の年と一致する（ステップＤ３のＹｅｓ）ため、日付位置特定部１３２は、複数の文字列９５のうち、１番目の文字列「２０１６」を年と特定する（ステップＤ５）。
【００９３】
文字列９５「２０１６」は、更新日時９２の月「０１」と一致せず（ステップＤ６のＮｏ）、日「２９」と一致しない（ステップＤ８のＮｏ）。
【００９４】
日付位置特定部１３２は、複数の文字列９５のうち、２番目の文字列「０１」に対してステップＤ２の処理を実行する。
【００９５】
文字列「０１」に対して、時刻は特定されておらず（ステップＤ２のＮｏ）、更新日時の年と一致しない（ステップＤ３のＮｏ、ステップＤ４のＮｏ）。このため、日付位置特定部１３２は、文字列「０１」が更新日時の月「０１」と一致するか判定する（ステップＤ６）。月が一致する（ステップＤ６のＹｅｓ）ため、日付位置特定部１３２は、文字列「０１」を月と特定する（ステップＤ７）。
【００９６】
文字列「０１」は、更新日時の日「２９」と一致しない（ステップＤ８のＮｏ）ため、日付位置特定部１３２は、次の文字列「２９」についてステップＤ２から処理を実行する。
【００９７】
文字列「２９」は、更新日時の日「２９」と一致するため（ステップＤ８のＹｅｓ）、日付位置特定部１３２は、文字列「２９」を日と特定する（ステップＤ９）。
【００９８】
複数の文字列９５のうち、２番目の「０１」が月、３番目の「２９」が日となり、特定された月と日は各一つである（ステップＤ１１）。
【００９９】
日付位置特定部１３２は、文字列９４「２０１６／０１／１６」の日付を特定する（ステップＢ１１）。
【０１００】
次に、時刻位置特定部１３１は、複数の文字列９３のうち、二番目の「１４：０１：３９．５３４」を抽出する。
【０１０１】
時刻位置特定部１３１は、時刻記号”：”で文字列９３の「１４：０１：３９．５３４」を分割し（ステップＢ２）、複数の文字列９６を生成する。
【０１０２】
時刻位置特定部１３１は、複数の文字列９６ごとに時刻を特定する処理を実行する（ステップＢ３）。まず、時刻位置特定部１３１は、複数の文字列９６のうち、１番目の文字列「１４」に時刻区分が含まれるかを判定する（ステップＣ２）。文字列９６の「１４」には、時刻区分が含まれていないため、時刻位置特定部１３１は、時刻を特定する処理を実行する（ステップＣ４）。
【０１０３】
文字列９６の「１４」は、更新日時９２の時「１４」と一致する（ステップＣ４のＹｅｓ）ため、時刻位置特定部１３１は、文字列９６の１番目の「１４」を時と特定する（ステップＣ６）。
【０１０４】
複数の文字列９６のうち、文字列９６の２番目の「０１」が、更新日時の分「０１」と一致する（ステップＣ７のＹｅｓ）ため、時刻位置特定部１３１は、文字列９６の２番目の「０１」を分と特定する（ステップＣ８）。
【０１０５】
次に、時刻位置特定部１３１は、複数の文字列９６のうち、「０１」の次に続く文字列の存在を確認する（ステップＣ９）。３番目の文字列「３９．５３４」が存在する（ステップＣ９のＹｅｓ）ため、時刻位置特定部１３１は、文字列「３９．５３４」を区切記号で分割できるかを判定する（ステップＣ１０）。文字列「３９．５３４」には、”．”が含まれており、時刻位置特定部１３１は、「３９．５３４」を区切記号で分割する（ステップＣ１０のＹｅｓ）。
【０１０６】
時刻位置特定部１３１は、区切記号“．”より前に位置する「３９」を秒と特定し、区切記号“．”より後に位置する「５３４」をミリ秒と特定する（ステップＣ１１）。
【０１０７】
時刻位置特定部１３１は、次の文字列「ｌｏｇ」、「ｆｉｌｅ」、「ｆｏｒｍａｔ」に対してもステップＣ２から同様な処理を繰り返す。これらの文字列からは時刻は特定されないため、時刻位置特定部１３１は、文字列９３に対する日時の特定を終了する。
【０１０８】
フォーマット特定部１４は、「年」「月」「日」「時」「分」「秒」「ミリ秒」の出現位置と、文字列を分割するために用いた時間記号、日付記号等の情報から、ログレコード９１に対して、「年／月／日  時：分：秒．ミリ秒」となる日時のフォーマットを特定する。
【０１０９】
＜具体例２＞
次に、特定装置１０が、ログレコードから日時のフォーマットを特定する動作について、具体例２を用いて説明する。
【０１１０】
図１１は、特定装置１０のログ取得部１１は、ログレコード１０１を取得する（ステップＡ１）。ログレコード１０１の日時のフォーマットは特定装置１０に予め記憶されていないものとする。
【０１１１】
特定装置１０の更新日時取得部１２は、ログレコードの取得方法に応じて、ログレコードの更新日時を取得する（ステップＡ２）。更新日時取得部１２は、取得した更新日時１０２を、年、月、日、時、分、秒に分割する。
【０１１２】
次に、特定装置１０の日時位置特定部１３は、ログレコード１０１を空白で分割し（ステップＡ３）、複数の文字列１０３を生成した後、第１判定処理（ステップＡ４）を実行する。
【０１１３】
第１判定処理において、複数の文字列１０３のうち、１番目の文字列「ＰＭ」は、時刻位置特定部１３１、日付位置特定部１３２のいずれでも時刻および日付として特定されない。
【０１１４】
次に、日時位置特定部１３の時刻位置特定部１３１は、２番目の文字列「２．０１．３９」を抽出する（ステップＢ１）。文字列「２．０１．３９」は、時刻記号”：”では分割されない（ステップＢ２）。そのためステップＢ３では、時刻は特定されない。
【０１１５】
次に、時刻位置特定部１３１は、記号で２番目の文字列「２．０１．３９」を分割し（ステップＢ５）、複数の文字列１０５「２」、「０１」、「３９」を生成する。
【０１１６】
時刻位置特定部１３１は、複数の文字列１０５に対して、時刻を特定する処理を実行する（ステップＢ６）
時刻位置特定部１３１は、複数の文字列１０５のうち、１番目の文字列１０５「２」を抽出する。次に、時刻位置特定部１３１は、１番目の文字列１０５「２」が時刻区分を含むかを判定する（ステップＣ２）。文字列１０５の「２」は、時刻区分を含まない（ステップＣ２のＮｏ）ため、時刻位置特定部１３１は、文字列１０５の「２」が、更新日時の時「１４」と一致するかを判定する（ステップＣ４、ステップＣ５）。
【０１１７】
文字列１０５の「２」は時が１２時間表記された文字とした場合、更新日時１０２の時「１４」と一致するため（ステップＣ５のＹｅｓ）、時刻位置特定部１３１は、文字列「０２」を時と特定する（ステップＣ６）。
【０１１８】
時刻位置特定部１３１は、次の文字列「０１」が、更新日時１０２の分「０１」と一致するかを判定する（ステップＣ７）。文字列「０１」が、更新日時１０２の分「０１」と一致するため、時刻位置特定部１３１は、文字列１０５の「０１」を分と特定する。
【０１１９】
時刻位置特定部１３１は、文字列「０１」の次に続く文字列が存在するか判定する（ステップＣ９）。文字列「０１」の次に文字列「３９」が存在し（ステップＣ９のＹｅｓ）、記号”．”で分割できないため（ステップＣ１０のＮｏ）、時刻位置特定部１３１は、文字列「３９」を秒と特定する（ステップＣ１２）。
【０１２０】
時刻位置特定部１３１は、文字列１０３のうち、「ｌｏｇ」、「ｆｉｌｅ」、「ｆｏｒｍａｔ」に対しても時刻、および、日付を特定する処理を実行する。
【０１２１】
時刻位置特定部１３１は、時刻を特定できず、さらに日付位置特定部１３２は、日付記号”／”で分割を行うが文字列１０３の「ｌｏｇ」、「ｆｉｌｅ」、「ｆｏｒｍａｔ」は分割されない。そのためステップＢ８では日時を特定できない（ステップＢ９）。そのため記号で分割すると同様に１０５の文字配列が得られる（ステップＢ１０）。分の０１が月と一致するため（ステップＤ６）、月を決定する（ステップＤ７）。全ての処理結果、月は含まれないため結果を破棄する。
【０１２２】
次に時刻位置特定部１３１は、３番目の「０１．２９．２０１６」を抽出する（ステップＢ１）。文字列「０１．２９．２０１６」は、時刻記号”：”で分割されず（ステップＢ２）、時刻位置特定部１３１は、ステップＢ３の処理の結果、時刻を特定できない（ステップＢ４）。
【０１２３】
そのため、時刻位置特定部１３１は、３番目の文字列「０１．２９．２０１６」を記号で分割し（ステップＢ５）、複数の文字列１０６を生成する。時刻位置特定部１３１は、ステップＢ６の時刻を特定する処理を実行するが、
時が一致しないため、時刻を特定することができない。
【０１２４】
次に、文字列「０１．２９．２０１６」は、日付記号”／”では分割されず（ステップＢ７）、日付位置特定部１３２は、日付を特定することができない（ステップＢ８）。
【０１２５】
日付位置特定部１３２は、文字列「０１．２９．２０１６」を記号で分割し（ステップＢ１０）、複数の文字列１０６を生成する。日付位置特定部１３２は、複数の文字列１０６に対して、日付を特定する処理を実行する（ステップＢ１１）。
【０１２６】
日付位置特定部１３２は、複数の文字列１０６のうち、１番目の文字列「０１」を抽出する（ステップＤ１）。時刻は特定済みではない（ステップＤ２のＮｏ）ため、日付位置特定部１３２は、文字列１０６の「０１」が、更新日時１０２の年「２０１６」と一致するかを判定する（ステップＤ３、Ｄ４）。更新日時の年と一致しない（ステップＤ３のＮｏ、Ｄ４のＮｏ）ため、日付位置特定部１３２は、更新日時の月「０１」と一致するかを判定する（ステップＤ６）。更新日時の月と一致するため、日付位置特定部１３２は、文字列１０６の「０１」を月と特定する（ステップＤ７）。また、文字列１０６「０１」は、更新日時の日「２９」とは一致しない（ステップＤ８のＮｏ）ため、次の文字列の処理に移る。
【０１２７】
次に、日付位置特定部１３２は、２番目の文字列「２９」を抽出する（ステップＤ１）。ステップＤ２〜Ｄ７間を処理した後、日付位置特定部１３２は、文字列「２９」が更新日時１０２の日「２９」と一致するかを判定する（ステップＤ８）
文字列「２９」は、更新日時１０２の日「２９」と一致するため（ステップＤ８）、日付位置特定部１３２は、文字列「２９」を日と特定する（ステップＤ９）。
【０１２８】
次に、日付位置特定部１３２は、３番目の文字列「１６」を抽出する（ステップＤ１）。日付位置特定部１３２は、文字列「１６」が年下二桁「１６」と一致するかを判定する（ステップＤ４）。文字列「１６」は、年下二桁と一致するため（ステップＤ４のＹｅｓ）、日付位置特定部１３２は、文字列「１６」を年と特定する（ステップＤ５）。文字列「０１」を月と特定し、文字列「２９」を日と特定した数は、月と日が各一つ（ステップＤ１１のＹｅｓ）である。
【０１２９】
この結果、日付位置特定部１３２は、複数の文字列１０６のうち、１番目の「０１」を月、２番目の「２９」を日、３番目の「１６」を年と特定する。
【０１３０】
文字列１０６の出現位置と文字数を年月日のフォーマットとする。
【０１３１】
これらの処理の結果、「時」「分」「秒」「月」「日」「年」の並びを取得する（ステップＢ１３）。
【０１３２】
ここで、時刻を特定する処理のステップＣ４で、文字列の時が１２時間表記されているとして特定したため、時刻として特定された文字列の前後に時刻区分の表記がないか検索する（ステップＢ１４）。
【０１３３】
時刻位置特定部１３１は、時として特定した「２」の前に文字列１０４「ＰＭ」があるため、時刻区分として特定する。
【０１３４】
フォーマット特定部１４は、ログレコードのうち日時として特定された文字の出現位置と、ログレコード又は文字列を分割した記号の情報に基づいて、ログレコード１０１を、「時刻区分」「時」「．」「分」「．」「秒」「月」「．」「日」「．」「年」で表記される日時のフォーマットとして特定する。
【０１３５】
＜具体例３＞
図１２に示すように、特定装置１０のログ取得部１１は、ログレコード１１１を取得する（ステップＡ１）。ログレコード１１１の日時のフォーマットは特定装置１０に予め記憶されていないものとする。
【０１３６】
特定装置１０の更新日時取得部１２は、ログレコード１１１の取得方法に応じて、ログレコード１１１の更新日時１１２を取得する（ステップＡ２）。更新日時取得部１２は、取得した更新日時１１２を年、月、日、時、分、秒に分割する。
【０１３７】
特定装置１０の日時位置特定部１３は、ログレコード１１１を空白で分割し（ステップＡ３）、複数の文字列１１３を生成した後、第１判定処理（ステップＡ４）を実行する。
【０１３８】
生成された複数の文字列１１３には、時刻記号“：”、日付記号“／”、記号“．”が含まれていない。このため、時刻位置特定部１３１、日付位置特定部１３２は、第１判定処理（ステップＡ４）では、時刻および日付を特定することができず、日時位置特定部１３は、日時の出現位置を特定することができない（ステップＡ５）。
【０１３９】
次に、日時位置特定部１３は、第２前処理（ステップＡ６）を実行し、複数の文字列１１３のうち、時刻区分と数字の文字列、あるいは、英語の文字列を１つの文字列となるように束ねて分割し（ステップＡ６）、複数の文字列１１４が生成される。
【０１４０】
日時位置特定部１３は、複数の文字列１１４のうち１番目の文字列「ＰＭ  ２  ０１  ３９  ０１  ０２  １６」に対して、第１判定処理（ステップＡ７）を実行する。
【０１４１】
時刻位置特定部１３１は、時刻記号”：”で分割できない（ステップＢ２）ため、ステップＢ３で時刻を特定することができない（ステップＢ３）。次に、時刻位置特定部１３１は、１番目の文字列「ＰＭ  ２  ０１  ３９  ０１  ０２  １６」を記号で分割し（ステップＢ５）、ステップＢ６で時刻を特定する処理を実行する。
【０１４２】
時刻を特定する処理（ステップＢ６）として、時刻位置特定部１３１は、１番目の文字列「ＰＭ」が時刻区分を含むかを判定し（ステップＣ２）、時刻区分「ＰＭ」を特定する（ステップＣ３）。
【０１４３】
時刻位置特定部１３１は、時刻区分を特定した後、検索位置を「ＰＭ」の後ろに設定するが、文字は無く時と一致しない。このため以後時刻の判定は行われない。
【０１４４】
時刻位置特定部１３１は、２番目の文字列「２」について、ステップＢ６で時刻を特定する処理を実行する。
文字列「２」から時刻の判定を行う。前述のとおりステップＢ６により時刻が特定される。
次に、文字列「２」は日付記号”／”で分割されず（ステップＢ７）、日付位置特定部１３２は、日付を特定することはできない（ステップＢ９のＮｏ）。
【０１４５】
日付位置特定部１３２は、文字列１１４の「ＰＭ  ２  ０１  ３９  ０１  ０２  １６」を記号で分割し（ステップＢ１０）、複数の文字列１１５を生成する。日付位置特定部１３２は、複数の文字列１１５に対して、ステップＢ１１で日付を特定する処理を実行する。
【０１４６】
先頭のＰＭについては何も行われない。２番目から４番目の文字列１１５は、既に時刻が割り当てられている。このため、以下の処理をスキップする（ステップＤ２）。そのため５番目の文字列１１５から値の判定し日時を特定する。
【０１４７】
出現位置とその間の文字を取得することで「時刻区分」「時」「分」「秒」「月」「日」「年」で表示されるフォーマットが特定される。
【０１４８】
＜具体例４＞
特定装置１０が、ログレコード１２１から日時のフォーマットを特定する動作について、具体例４を用いて説明する。図１６に示す具体例４は、日付と時刻が連続して表記されている例である。
【０１４９】
図１３に示すように、特定装置１０のログ取得部１１は、ログレコード１２１を取得する（ステップＡ１）。ログレコード１２１の日時のフォーマットは特定装置１０に予め記憶されていないものとする。
【０１５０】
特定装置１０の更新日時取得部１２は、ログレコード１２１の取得方法に応じて、ログレコード１２１の更新日時１２２を取得する（ステップＡ２）。更新日時取得部１２は、取得した更新日時１２２を、年、月、日、時、分、秒に分割する。
【０１５１】
特定装置１０の日時位置特定部１３は、ログレコード１２１を空白で分割し（ステップＡ３）、複数の文字列を生成した後、第１判定処理（ステップＡ４）を実行する。
【０１５２】
第１判定処理として、日時位置特定部１３の時刻位置特定部１３１は、
複数の文字列のうち、１番目の文字列１２３「２０１６０１２９１４０１３９」は、第１判定処理（ステップＡ４、ステップＡ７）で時刻、日付を特定できず、日時の年月日は出現位置を特定できない（ステップＡ８）。そのため、日時位置特定部１３は、第２判定処理（ステップＡ９）を実行する。
【０１５３】
日時位置特定部１３の時刻位置特定部１３１は、取得した更新日時１２２のうち、時を表す「１４」と、分を表す「０１」を結合し（ステップＦ２）、時分「１４０１」を生成する。
【０１５４】
時刻位置特定部１３１は、文字列１２３のうち、時分「１４０１」の位置を特定する処理を実行する（ステップＦ３）。文字列１２３において、文字列１２３の先頭を１番目としたときに、９番目から１２番目の文字列「１４０１」が時分の位置に該当する。
【０１５５】
時刻位置特定部１３１は、文字列１２３のうち、９番目と１０番目の文字「１４」を時、１１番目と１２番目の「０１」を分と特定する（ステップＦ３）。
【０１５６】
次に、時刻位置特定部１３１は、特定された分「０１」の直後の二桁の数字があるかを判定する（ステップＦ４）。二桁の数字「３９」があるため（ステップＦ４のＹｅｓ）、時刻位置特定部１３１は、１３番目、１４番目の値を秒と特定する（ステップＦ５）。
【０１５７】
次に、時刻位置特定部１３１は、特定された秒「３９」の直後の二桁の数字があるかを判定する（ステップＦ６）。二桁の数字はないため（ステップＦ６のＮｏ）、ミリ秒の位置は特定されない。
【０１５８】
次に、日付位置特定部１３２は、文字列１２３のうち、更新日時１２２の年「２０１６」と一致する文字を検索する。文字列１２３の「２０１６」が、更新日時１２２の年「２０１６」と一致するため（ステップＦ９）、文字列１２３「」のうち、１〜４番目の文字「２０１６」を年と特定する（ステップＦ１０）。
【０１５９】
次に、日付位置特定部１３２は、文字列１２３のうち、更新日時１２２の月「０１」と一致する文字があるかを判定する（ステップＦ１３）。５番目、６番目の文字「０１」が、更新日時１２２の月「０１」と一致するため、文字列１２３の「０１」を月と特定する（ステップＦ１４）。
【０１６０】
次に、日付位置特定部１３２は、文字列１２３のうち、更新日時１２２の日「２９」と一致する文字があるかを判定する（ステップＦ１５）。７番目、８番目の文字「２９」が、更新日時１２２の日「２９」と一致するため、文字列１２３の「２９」を日と特定する（ステップＦ１６）。
【０１６１】
［効果の説明］
第１の実施形態によれば、ログレコードの日時のフォーマットの定義を用いることなく、ログレコードにおける日時のフォーマットを特定することができる。
【０１６２】
その理由は、更新日時取得部１２が取得したログレコードの更新日時の日付、時刻に基づいて、日時位置特定部１３（日付位置特定部１３２、時刻位置特定部１３１）がログレコードの表記における日付の出現位置、時刻の出現位置を特定し、フォーマット特定部１４がログレコードの日時のフォーマットを特定するからである。
【０１６３】
また、第１の実施形態の特定装置１０は、連続表記位置特定部１３３を備えることで、日付位置特定部１３２、時刻位置特定部１３１で特定できなかったログレコードの日時の出現位置を特定することもできる。
【０１６４】
また、第１の実施形態の特定装置１０は、日時位置特定部１３の他に遅延解析部１５を備える。遅延解析部１５によって、ログレコード更新日時から一定時間前に記録されたログレコードの日時を特定することができる。
【０１６５】
本発明の第２の実施形態に係る特定装置について、図面を用いて説明する。第２の実施形態は、第１の実施形態の概要を表す形態である。
【０１６６】
［第２の実施形態］
図１４は、第２の実施形態に係る特定装置の構成を示すブロック図である。図１４を参照すると、第１の実施形態に係る特定装置１０は、ログ取得部１１と、更新日時取得部１２と、日時位置特定部１３と、フォーマット特定部１４を備える。
【０１６７】
第２の実施形態に係る特定装置は、第１の実施形態に係る特定装置１０の遅延解析部１５が削除された構成である。例えば、１つのファイルに１つのログレコードが記録されているような場合は、ログレコードに表記された日時が、ログレコードのファイルの更新日時と同じになる。このようなログレコードの日時のフォーマットを特定する場合には、遅延解析部１５の構成は不要となる。第２の実施形態の特定装置１０におけるその他の構成は、第１の実施形態の特定装置１０と同様であり、詳細な説明は省略する。
【０１６８】
図１５は、第２の実施形態に係る特定装置の日時位置特定部の構成を示すブロック図である。図１５に示すように、第２の実施形態の日時位置特定部１３は、第１の実施形態の日時位置特定部１３と比べて連続表記位置特定部１３３を削除された構成であってもよい。第２の実施形態の日時位置特定部１３におけるその他の構成は、第１の実施形態の日時位置特定部１３と同様であり、詳細な説明は省略する。
【０１６９】
次に第２の実施形態の特定装置の動作について図面を用いて説明する。図１６は、第２の実施形態の特定装置の動作を示すフローチャートである。
【０１７０】
ログ取得部１１は、ファイル又はネットワークを介してログレコードを取得する（ステップＳ１）。更新日時取得部１２は、ログレコードの更新日時を取得する（ステップＳ２）。ログレコードの更新日時の一例は、ログレコードを含むファイルが更新された日時、あるいは、ネットワークを介してログレコードを受信した日時である。日時位置特定部１３は、更新日時取得部１２が取得した更新日時に基づいて、ログ取得部１１が取得したログレコードの文字列の中から日時の出現位置を特定する（ステップＳ３）。フォーマット特定部１４は、特定された日時の出現位置に基づいて、ログレコードにおける日時のフォーマットを特定する。
【０１７１】
第２の実施形態によれば、ログレコードの日時のフォーマットの定義を用いることなく、ログレコードにおける日時のフォーマットを特定することができる。その理由は、更新日時取得部１２が取得したログレコードの更新日時の日付、時刻に基づいて、日時位置特定部１３（日付位置特定部１３２、時刻位置特定部１３１）がログレコードの表記における日付の出現位置、時刻の出現位置を特定し、フォーマット特定部１４がログレコードの日時のフォーマットを特定するからである。
【０１７２】
（ハードウエア構成）
図１７は、第１〜３の実施形態における端末４０をコンピュータ装置で実現したハードウエア構成を示す図である。
【０１７３】
第１、第２の実施形態において、特定装置１０の各構成要素は、機能単位のブロックを示している。特定装置１０の各構成要素の一部又は全部は、例えば、図１７に示すようなコンピュータ装置６００とプログラムとの任意の組み合わせにより実現される。コンピュータ装置６００は、一例として、以下のような構成を含む。
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）６０１、
ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）６０２、
ＲＡＭ（Ｒａｍｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）６０３、
ＲＡＭ６０３にロードされるプログラム６０４、
プログラム６０４を格納する記憶装置６０５、
記録媒体６０６の読み書きを行うドライブ装置６０７、
通信ネットワーク６０９と接続する通信インターフェース６０８、
データの入出力を行う入出力インターフェース６１０、
各構成要素を接続するバス６１１
コンピュータ装置６００の各構成要素は、これらの機能を実現するプログラム６０４をＣＰＵ６０１が取得して実行することで実現される。各構成要素の機能を実現するプログラム６０４は、例えば、予め記憶装置６０５又はＲＡＭ６０３に格納されており、必要に応じてＣＰＵ６０１が読み出す。なお、プログラム６０４は、通信ネットワーク６０９を介してＣＰＵ６０１に供給されてもよいし、予め記録媒体６０６に格納されており、ドライブ装置６０７が当該プログラムを読み出してＣＰＵ６０１に供給してもよい。
【０１７４】
コンピュータ装置６００実現方法には、様々な変形例がある。例えば、コンピュータ装置６００は、各構成要素にそれぞれ別個のコンピュータ装置６００とプログラムとの任意の組み合わせにより実現されてもよい。また、コンピュータ装置６００が備える複数の構成要素が、一つのコンピュータ装置６００とプログラムとの任意の組み合わせにより実現されてもよい。
【０１７５】
また、コンピュータ装置６００の各構成要素の一部又は全部は、その他の汎用または専用の回路、プロセッサ等やこれらの組み合わせによって実現される。これらは、単一のチップによって構成されてもよいし、バスを介して接続される複数のチップによって構成されてもよい。また、コンピュータ装置６００の代わりにＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）のようなプログラマブルロジックデバイスを用いてもよい。
【０１７６】
さらに、コンピュータ装置６００の各構成要素の一部又は全部は、上述した回路等とプログラムとの組み合わせによって実現されてもよい。
【０１７７】
また、コンピュータ装置６００の各構成要素の一部又は全部が複数の情報処理装置や回路等により実現される場合には、複数の情報処理装置や回路等は、集中配置されてもよいし、分散配置されてもよい。例えば、情報処理装置や回路等は、クライアントアンドサーバシステム、クラウドコンピューティングシステム等、各々が通信ネットワークを介して接続される形態として実現されてもよい。
【０１７８】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０１７９】
１１  ログ取得部
１２  更新日時取得部
１３  日時位置特定部
１３１  時刻位置特定部
１３２  日付位置特定部
１３３  連続表記位置特定部
１４  フォーマット特定部
１５  遅延解析部
【図１】
2018005363.tif 000003
【図２】
2018005363.tif 000004
【図３】
2018005363.tif 000005
【図４】
2018005363.tif 000006
【図５】
2018005363.tif 000007
【図６】
2018005363.tif 000008
【図７】
2018005363.tif 000009
【図８】
2018005363.tif 000010
【図９】
2018005363.tif 000011
【図１０】
2018005363.tif 000012
【図１１】
2018005363.tif 000013
【図１２】
2018005363.tif 000014
【図１３】
2018005363.tif 000015
【図１４】
2018005363.tif 000016
【図１５】
2018005363.tif 000017
【図１６】
2018005363.tif 000018
【図１７】
2018005363.tif 000019