2

LogParser 2.2 を使用して IIS ログ ファイルを解析しようとしていますが、次のユーザー エージェントにスペースがあり、それが新しいフィールドであると認識されるため、ユーザー エージェントに関して問題が発生しています...

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"

そして、文字列の周りの "" は気にしませんが、"" の間の何かを 1 つのフィールドとして扱う方法を知っている人はいますか?

ありがとう、

ps これは、IIS Advanced Logging モジュールによって生成されたログからのものです。

4

1 に答える 1

0

これは、w3c 標準には空白の使用が含まれていないためです。ログ パーサーは空白を認識し、引用符の有無にかかわらず、それが新しいフィールドであると想定します。以下のページから

「エントリは、単一の HTTP トランザクションに関連する一連のフィールドで構成されます。フィールドは空白で区切られます。この目的のためにタブ文字を使用することをお勧めします。フィールドが特定のエントリダッシュで使用されていない場合、「-」は省略されたフィールドを示します。ディレクティブは、ロギング プロセス自体に関する情報を記録します。」

http://www.w3.org/TR/WD-logfile.html

Robert McMurray は、COM プラグインの書き方についてのブログを書いています。これは、まったく同じ問題を解決しようとする私の調査では、最良の解決策のようです ("" 内のすべての空白を "+" に置き換える正規表現を書くことを除けば)。

http://blogs.iis.net/robert_mcmurray/archive/2013/02/28/advanced-log-parser-part-7-creating-a-generic-input-format-plug-in.aspx

お役に立てれば

編集: これを行う方法があると判断しました。IIS Advanced Logging に手動で追加した X-Header-For フィールドを使用した次の例を参照してください。重要な部分は太字になっています。

LogParser.exe "SELECT SUBSTR(X-Header-For, 0, INDEX_OF(X-Header-For, ',')) as [Remote Ip], date, time, cs-uri-stem, s-contentpath, sc- status FROM $log" -i:W3C -dQuotes ON

于 2013-03-11T15:14:10.147 に答える