2012-03-08 52 views
7

我最近开始使用带有可视化界面的Log Parser使用日志解析器来解析不同文件夹中的大量日志

我想解析的日志来自IIS,它们与SharePoint相关。例如,我想知道有多少人访问特定网页等

它似乎IIS创建在不同的文件夹日志(我不知道为什么),每天有一个新的日志文件另一个文件夹。

所以我的问题是,是否有可能接近所有这些文件在不同的文件夹?

我知道你可以使用From-clause,把不同的文件夹,但它是特别是如果在加入未来的新文件夹太难了。目标是创建一个将被执行的脚本。

因此,例如,在一个名为文件夹日志日志文件,我有文件夹文件夹1,文件夹2,folder3,folder4等,每个文件夹中有日志文件LOG1,LOG2,日志3,logN个等

所以我的查询应该是这样的:Select * FROM path/LogFiles/*/*.log但日志解析器不接受它,所以如何实现它?

回答

17

调用LOGPARSER时,您可以使用-recurse选项。

例如:

logparser file:"query.sql" -i:IISW3C -o:CSV -recurse 

其中query.sql的包含:

select * 
from .\Logs\*.log 

,并在我的当前目录中,有一个名为“日志”目录包含多个子目录,每个包含日志文件。如:

\Logs\server1\W3SVC1 
\Logs\server1\W3SVC2 
\Logs\server2\W3SVC1 
\Logs\server2\W3SVC2 
etc. 
+1

经过验证2014年4月21日。这也适用于FROM W:\ LogParser \ * log – Jack 2014-04-21 12:49:43

5

您可以合并日志然后查询合并的日志

什么,我要做的就是

LogParser.exe -i:w3c "select * into E:\logs\merged.log from E:\logs\WEB35\*, E:\logs\WEB36\*, E:\logs\WEB37\*" -o:w3c 
0

LogParser的帮助没有列出-recurse选项,所以我不确定它是否仍受支持。但是,这是我做的绕过它:

假设您使用以下命令来执行LOGPARSER -

logparser "SELECT * INTO test.csv FROM 'D:\samplelog\test.log'" -i:COM -iProgID:Sample.LogParser.Scriptlet -o:CSV 

然后简单的“递归”文件夹结构,以创建一个批处理脚本和解析其中的所有文件。这样做的批处理脚本如下所示 -

echo off 
for /r %%a in (*) do (
    for %%F in ("%%a") do (
     logparser "SELECT * INTO '%%~nxF'.csv FROM '%%a'" -i:COM -iProgID:Sample.LogParser.Scriptlet 
     REM echo %%~nxF 
    ) 
) 

从需要解析的日志文件所在的路径执行它。 这可以进一步自定义,使用append(>>)运算符将所有解析的日志吐出到一个文件中。

希望这会有所帮助。

1

我更喜欢这样的powershell: Select-String C:\Logs\diag\*.log -pattern "/sites/Very" | ?{$_.Line -match "Important"}或任何你想要的。

+0

您好,欢迎来到StackOverflow。请格式化您的答案,并添加更多信息,因为现在的答案不适合SO。请参阅http://stackoverflow.com/help/how-to-answer以获取更多信息。 – Chaithanya 2017-03-01 19:37:21