C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.30519 の関連記事表示

<< 0 >>
■30519  Logファイルの解析について
□投稿者/ マサル -(2008/12/25(Thu) 15:46:11)

    分類:[.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行ずつチェックして
    というのを繰り返すことになるので、もっと効率良く処理出来ないものかと悩んでいます。
親記事 /過去ログ54より / 関連記事表示
削除チェック/

■30521  Re[1]: Logファイルの解析について
□投稿者/ .SHO -(2008/12/25(Thu) 15:54:53)
    No30519 (マサル さん) に返信

    Seek すればいいのでは?
記事No.30519 のレス /過去ログ54より / 関連記事表示
削除チェック/

■30522  Re[2]: Logファイルの解析について
□投稿者/ .SHO -(2008/12/25(Thu) 16:05:38)
    > ■No30519 (マサル さん) に返信

    っていうか、常駐したまま10秒に1回見るなら、ファイルをクローズせずに
    行が追加されるまでEOFを検知してれば、何もしなくていいような。
記事No.30519 のレス /過去ログ54より / 関連記事表示
削除チェック/

■30524  Re[3]: Logファイルの解析について
□投稿者/ マサル -(2008/12/25(Thu) 17:14:18)
    No30522 (.SHO さん) に返信
    >>■No30519 (マサル さん) に返信
    >
    > っていうか、常駐したまま10秒に1回見るなら、ファイルをクローズせずに
    > 行が追加されるまでEOFを検知してれば、何もしなくていいような。
    すいません、ちょっと具体的にどうなのかがわからないんですが
    closeせずに開きっぱなしで、更に常時別アプリからの書き込みを検知するって事なんでしょうか?

    まず既に別アプリが生成してあるログファイルを読み込んで、その時点での最終行までいきますよね?
    そこでファイルを閉じずに、そのままstreamを放置しておくって事でしょうか?
    その開いたままの状態で、また別アプリがログを追記した場合
    自アプリで開いてる方には反映されるんですかね?
記事No.30519 のレス /過去ログ54より / 関連記事表示
削除チェック/

■30525  Re[4]: Logファイルの解析について
□投稿者/ .SHO -(2008/12/25(Thu) 17:17:40)
    No30524 (マサル さん) に返信

    > 自アプリで開いてる方には反映されるんですかね?

    やってみればいい。
記事No.30519 のレス /過去ログ54より / 関連記事表示
削除チェック/

■30526  Re[4]: Logファイルの解析について
□投稿者/ Jitta -(2008/12/25(Thu) 18:24:42)
    No30524 (マサル さん) に返信
    > ■No30522 (.SHO さん) に返信
    > >>■No30519 (マサル さん) に返信
    >>
    >>っていうか、常駐したまま10秒に1回見るなら、ファイルをクローズせずに
    >>行が追加されるまでEOFを検知してれば、何もしなくていいような。
    > すいません、ちょっと具体的にどうなのかがわからないんですが
    > closeせずに開きっぱなしで、更に常時別アプリからの書き込みを検知するって事なんでしょうか?
    >
    > まず既に別アプリが生成してあるログファイルを読み込んで、その時点での最終行までいきますよね?
    > そこでファイルを閉じずに、そのままstreamを放置しておくって事でしょうか?
    > その開いたままの状態で、また別アプリがログを追記した場合
    > 自アプリで開いてる方には反映されるんですかね?

    seek に、終わりまで飛ぶってのがあるので、それを利用する。
    書く方は、読み取り共有で書き込む。書いたら閉じる。このとき、バッファリングの途中で書き出さないように設定する(って、そんな設定あったっけ?)。
    読む方は、開いたまま。現在位置からファイルの最後までを読み取って、その中から検索する。
記事No.30519 のレス /過去ログ54より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -