|
分類:[.NET 全般]
こんにちわ。 現在、ログファイルを解析し、その最新情報を表示するソフトを作成しております。 ログファイルはlog4netではき出したテキストみたいなのを思って貰えればいいと思います。 上から順に古く、下に追記していくので下にあるものが新しいです。
流れ的には ・別アプリがログを随時更新している→自アプリで10秒ごとにそのログを読み込み、項目ごとに最新の内容だけを表示する という繰り返しになります。
レベル/項目/内容 INFO 告知事項A [○○○○○○○]が発生しました INFO 告知事項B [×××××××××]が発生しました INFO 告知事項A [□□□□□□□□]が発生しました ERROR 緊急事項A [○○○○○○○]が発生しました INFO 告知事項B [○○○○○○○]が発生しました ERROR 緊急事項A [○○○○○○○]が発生しました
それで、この中からINFOのみを抽出し、且つその項目ごとに最新の情報の[]内のみを表示するというのが作りたい物です。 例えば上のログの場合、望む結果は
告知事項A :□□□□□□□□ 告知事項B:○○○○○○○
です。 INFOのみを抽出するのは、ヘッダ部というかその行頭に「INFO」という文字列が含まれているかどうか見ればいいだけなのでいいんですが 後はその最新だけ取得する方法です。 いくつか手法は考えたんですが、効率的な方法ではないような気がしています。 例えば告知事項分の変数なりを作っておき、上から順に読んでいってマッチすれば上書きしていくという物です。
全行読み終わるまでループ{ if(”告知事項A” という文字列が取得した行に含まれていたら){ strKokutiA = その行から[]に囲まれた部分だけを切り取って代入 } if(”告知事項B” という文字列が取得した行に含まれていたら){ strKokutiB = その行から[]に囲まれた部分だけを切り取って代入 } }
というような感じです。 上から順に全て読み取っていけば、最終的に変数strKokutiAとBには、一番新しい内容が上書き上書きで入っているという考え方です。
ログの方も随時更新されていますし、ログが小さい分には別にたいした処理でもないのでいいんですが ログが大きくなると、10秒ごとにそのでかいファイルを読み込んで、上から全部1行ずつチェックして というのを繰り返すことになるので、もっと効率良く処理出来ないものかと悩んでいます。
|