使用日志解析器解析不同文件夹中的大量日志

时间:2012-03-08 20:19:10

标签: sharepoint parsing iis logging

我最近开始使用Log Parser和可视化界面。

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

似乎IIS在不同的文件夹中创建日志(我不知道为什么),并且每天都有一个新的日志文件存在于不同的文件夹中。

所以我的问题是,是否可以在不同的文件夹中处理所有这些文件?

我知道您可以使用From-clause,放置不同的文件夹,但是如果将来添加新文件夹,则太难了。目标是创建一个将被执行的脚本。

因此,例如在名为 LogFIles 的文件夹日志中,我有文件夹folder1,folder2,folder3,folder4等,并且在每个文件夹中都有日志文件log1,log2,log 3,logN,等

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

5 个答案:

答案 0 :(得分:20)

调用logparser时可以使用-recurse选项。

例如:

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

其中query.sql包含:

select *
from .\Logs\*.log

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

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

答案 1 :(得分:5)

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

我要做的是

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

答案 2 :(得分:1)

我更喜欢这样的powershell:

Select-String C:\Logs\diag\*.log -pattern "/sites/Very" | ?{$_.Line -match "Important"}

答案 3 :(得分: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(>>)运算符将所有已解析的日志吐出到一个文件中。

希望这有帮助。

答案 4 :(得分:0)

通过使用powershell以递归方式获取子目录中的文件项并解析它们来检查这个:https://stackoverflow.com/a/31024196/4502867