使用LogParser查询带有额外字段的IIS日志

使用LogParser查询带有额外字段的IIS日志,iis,logparser,Iis,Logparser,我有带额外字段“foo”的IIS日志 #Fields: foo date s-sitename ... foo1 2009-02-15 W3SVC1 ... foo2 2009-02-15 W3SVC1 ... 结果,所有LogParser查询都被破坏: logparser -i:IISW3C "SELECT c-ip, s-ip FROM my.log" Statistics: ----------- Elements processed: 0 Elements output: 0

我有带额外字段“foo”的IIS日志

#Fields: foo date s-sitename ...
foo1 2009-02-15 W3SVC1 ...
foo2 2009-02-15 W3SVC1 ...
结果,所有LogParser查询都被破坏:

logparser -i:IISW3C  "SELECT c-ip, s-ip FROM my.log"

Statistics:
-----------
Elements processed: 0
Elements output:    0
Execution time:     0.00 seconds

是否可以将这些额外字段通知LogParser,以便它可以解析IIS文件?

不知道LogParser,但如果您不成功,您可以尝试似乎可以轻松处理不同日志格式的方法。

尝试W3C格式(-i:W3C)

如果这不起作用,并且这是一次性分析,您可以创建一个脚本来删除该列。如果这是一个正在进行的活动,你可能想考虑使用一个标准格式,或者至少把额外的字段移到最后。
顺便说一句,LogParser确实支持。

使用option-iHeaderFile定义您自己的字段。logparser-h将证明附加信息

这很容易做到

只需在字符串周围使用TRIM函数即可。通过这种方式,您可以在日志解析器查询中键入任何想要作为自定义额外字段的字符串

参考:

例如,我在这个查询中这样做(用于检索平均时间和最大时间):


日志解析器W3C格式与“X-Forwarded-For”头一起使用,用于测试负载平衡器的“粘性”,还应确保您查询的所有日志文件中都存在自定义字段。否则,您仍然会得到相同的错误。即使只有少数文件没有。根据我在文档中找到的信息,iHeaderFile仅适用于TSV和CSV输入格式。@bkqc:您也可以将TSV解析器用于IIS日志文件,即使字段由空格而不是制表符分隔。只需定义iSeparator和nSep属性即可。由于我的IIS日志文件包含14个字段,我自己使用以下选项来解析它们:-Isparator:space-fixedSep:OFF-headerRow:OFF-iHeaderFile:MyCustomPath-nFields:14-lineFilter:-#-iTsFormat:yyyy-MM-dd hh:MM:ssI尝试使用TRIM,但仍然出现以下错误。是否还需要设置其他内容才能使其正常工作@分析错误:“在#Fields指令中找到的未知字段MyCustomField在“\\server\share\LogFiles\W3SVC37\ex200924_x.log”文件头中找不到“#Fields”指令。第5到22178行已被忽略”@bkqc我的道歉:我的原始答案与此帖子无关,它只允许在结果中添加任意列!关于您的问题,如果您需要解析已经存在额外列的源日志文件,那么最好是去掉-i:IISW3C,改用-i:TSV。然后必须指定iHeaderFile和nFields属性,以便解析引擎知道需要哪些列。这符合您的需要,因为您可以在头文件中指定任何列名:-)在日志解析器附带的文档帮助中查找这些关键字。
logparser -i:IISW3C -rtp:-1 -o:NAT -headers:OFF -iw:ON "SELECT TRIM('my-website-custom-extra-column-name.com') AS siteName, TRIM('foo-bar-custom-extra-column-name') AS fooBar, AVG(time-taken) As AverageTimeTaken, MAX(time-taken) As MaxTimeTaken, COUNT(*) As Hits, TO_LOWERCASE(cs-uri-stem) As Uri FROM C:\inetpub\yourwebsite.com\ex*.log TO c:\myOutputParsedLog.txt WHERE (Extract_Extension(To_Lowercase(cs-uri-stem)) IN ('aspx')) GROUP BY TO_LOWERCASE(cs-uri-stem) ORDER BY AverageTimeTaken DESC"