我最近开始使用Log Parser
和可视化界面。
我要解析的日志来自IIS,它们与SharePoint相关。例如,我想知道有多少人访问了特定的网页等。
似乎IIS在不同的文件夹中创建日志(我不知道为什么),并且每天都有一个新的日志文件存在于不同的文件夹中。
所以我的问题是,是否可以在不同的文件夹中处理所有这些文件?
我知道您可以使用From-clause
,放置不同的文件夹,但是如果将来添加新文件夹,则太难了。目标是创建一个将被执行的脚本。
因此,例如在名为 LogFIles 的文件夹日志中,我有文件夹folder1,folder2,folder3,folder4等,并且在每个文件夹中都有日志文件log1,log2,log 3,logN,等
所以我的查询应该是这样的:Select * FROM path/LogFiles/*/*.log
但是日志解析器不接受它,那么如何实现呢?
答案 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。