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"

而且它不关心字符串周围的“”,任何人都知道无论如何让它将“”之间的任何东西都视为一个字段?

谢谢,

ps 这是来自 IIS 高级日志记录模块生成的日志。

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 高级日志记录的 X-Header-For 字段,重要的位是粗体。

LogParser.exe "SELECT SUBSTR(X-Header-For, 0, INDEX_OF(X-Header-For, ',')) as [Remote Ip], 日期, 时间, cs-uri-stem, s-contentpath, sc-来自 $log 的状态” -i:W3C -dQuotes ON

于 2013-03-11T15:14:10.147 回答