2012-03-08 12 views
7

Recentemente ho iniziato a utilizzare Log Parser con interfaccia visiva.Utilizzo del parser di log per analizzare molti log in diverse cartelle

I log che voglio analizzare provengono da IIS e sono relativi a SharePoint. Ad esempio, desidero sapere quante persone visitano particolari pagine Web, ecc.

E sembra che IIS crei i registri in cartelle diverse (non so perché) e ogni giorno ci sia un nuovo file di registro in una cartella diversa.

Quindi la mia domanda è, è possibile accedere a tutti quei file in cartelle diverse?

So che è possibile utilizzare From-clause, inserire cartelle diverse, ma è troppo difficile soprattutto se in futuro verranno aggiunte nuove cartelle. L'obiettivo è creare uno script che verrebbe eseguito.

Così, per esempio, in un registro cartella denominata LogFiles, ho cartelle cartella1, cartella2, Folder3, Cartella4, ecc e in ogni cartella ci sono file di log log1, log2, log 3, log N, ecc

Quindi la mia query dovrebbe essere così: Select * FROM path/LogFiles/*/*.log ma il parser di log non lo accetta, quindi come realizzarlo?

risposta

17

È possibile utilizzare l'opzione -recurse quando si chiama LogParser.

Ad esempio:

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

dove query.sql contiene:

select * 
from .\Logs\*.log 

e nella mia directory corrente, c'è una directory chiamata "log" che contiene più sottodirectory, ciascuna contenente log files. Come ad esempio: aiuto

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

verificato il 21 aprile 2014. questo funziona anche come FROM W: \ LogParser \ *. Log – Jack

5

è possibile unire i registri quindi interrogare il registro unito

quello che ho da fare è

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

di LogParser non elenca l'opzione -recurse quindi non sono sicuro che è ancora supportato. Tuttavia, questo è quello che ho fatto per ottenere intorno ad esso:

Diciamo che si utilizza il seguente comando per eseguire LogParser -

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

Poi semplicemente creare uno script batch per "recurse" nella struttura delle cartelle e analizzare tutti i file in esso contenuti Lo script batch che fa questo assomiglia a questo -

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 
    ) 
) 

eseguirlo dal percorso in cui si trovano i file di log che devono essere analizzati. Questo può essere ulteriormente personalizzato per sputare tutti i log analizzati in un file usando l'operatore append (>>).

Spero che questo aiuti.

1

Preferisco PowerShell come questo: Select-String C:\Logs\diag\*.log -pattern "/sites/Very" | ?{$_.Line -match "Important"} o quello che vuoi.

+0

Ciao e benvenuto su StackOverflow. Si prega di formattare la risposta e aggiungere ulteriori informazioni, in quanto la risposta così com'è non è la soluzione migliore per SO. Si prega di dare un'occhiata a http://stackoverflow.com/help/how-to-answer per maggiori informazioni. – Chaithanya