Использование log parser для разбора множества журналов в разных папках

Я недавно начал использовать Log Parser с визуальным интерфейсом.

журналы, которые я хочу проанализировать, поступают из IIS, и они связаны с SharePoint. Например, я хочу знать, сколько людей посещали определенные веб-страницы, и т. д.

и кажется, что IIS создает журналы в разных папках (я не знаю, почему), и каждый день появляется новый файл журнала в другой папке.

Итак, мой вопрос в том, можно ли подойти ко всем этим файлам по-разному папки?

Я знаю, что вы можете использовать From-clause, положить разные папки, но это слишком сложно, особенно если в будущем будут добавлены новые папки. Цель состоит в том, чтобы создать один скрипт, который будет выполняться.

Так, например, в журнале папку с именем LogFIles, у меня есть папки folder1, folder2, folder3, folder4 и т. д. и в каждой папке есть файлы журналов log1, log2, log 3, logN и т.д.

поэтому мой запрос должен быть таким:Select * FROM path/LogFiles/*/*.log но анализатор журнала не принимает его, так как же его реализовать?

5 ответов


вы можете использовать параметр-recurse при вызове logparser.

например:

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

где запрос.sql содержит:

select *
from .\Logs\*.log

и в моем текущем каталоге есть каталог под названием "журналы", который содержит несколько подкаталогов, каждый из которых содержит файлы журналов. Например:

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

вы можете объединить журналы, а затем запросить объединенный журнал

то, что я должен сделать, это

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

Я предпочитаю powershell следующим образом:

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

справка 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 ( > > ).

надеюсь, что это помогает.


проверьте это:https://stackoverflow.com/a/31024196/4502867 с помощью powershell рекурсивно получать элементы файлов в подкаталогах и анализировать их.