这是因为 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