O Microsoft Log Parser é uma ferramenta poderosa e versátil que permite a consulta de dados baseados em texto como arquivos de log, arquivos XML e CSV, bem como as principais fontes de dados sobre o sistema operacional Windows.
Neste artigo daremos alguns exemplos de utilização do Log Parser.
1. Instalando o Log ParserFaça o
download do Log Parser e execute o arquivo LogParser.msi.
2. Excute o LogParseClique no menu Iniciar > Executar e colocque a linha abaixo:
%COMSPEC% /k "%PROGRAMFILES%\Log Parser 2.2\LogParser.exe"
Clique em OK.
3. Exemplos de QueriesAssumindo que o seu o seus arquivos de log atendam pelo critério ex0902*.log, navegue até a pasta onde eles estão e execute as queries:
Exemplo 1: Retorna a lista de páginas que retornaram o status Ok.
logparser -rtp:-1 "SELECT cs-uri-stem, cs-uri-query, date, sc-status, cs(Referer) INTO 200sReport.txt FROM ex0902*.log WHERE (sc-status >= 200 AND sc-status < 300) ORDER BY sc-status, date, cs-uri-stem, cs-uri-query"
Exemplo 2: Retorna a lista de páginas que retornaram o status Redirect.
logparser -rtp:-1 "SELECT cs-uri-stem, cs-uri-query, date, sc-status, cs(Referer) INTO 300sReport.txt FROM ex0902*.log WHERE (sc-status >= 300 AND sc-status < 400) ORDER BY sc-status, date, cs-uri-stem, cs-uri-query"
Exemplo 3: Retorna a lista de páginas que retornaram o status de erro.
logparser -rtp:-1 "SELECT cs-uri-stem, cs-uri-query, date, sc-status, cs(Referer) INTO 500sReport.txt FROM ex0811*.log WHERE (sc-status >= 500 AND sc-status < 600) ORDER BY sc-status, date, cs-uri-stem, cs-uri-query"
Exemplo 4: Retorna o uso de banda do seu site
logparser -rtp:-1 "SELECT date, SUM(cs-bytes) AS [Bytes received], DIV(SUM(cs-bytes), 1024) AS [KBytes received], DIV(DIV(SUM(cs-bytes), 1024), 1024) AS [MBytes received], SUM(sc-bytes) AS [Bytes sent], DIV(SUM(sc-bytes), 1024) AS [KBytes sent], DIV(DIV(SUM(sc-bytes), 1024), 1024) AS [MBytes sent], COUNT(*) AS Requests INTO Bandwidth.txt FROM ex0811*.log GROUP BY date ORDER BY date"
Exemplo 5: Retorna o a quantidade de dados enviados e recebidos por tipo de arquivo.
logparser -rtp:-1 "SELECT EXTRACT_EXTENSION(cs-uri-stem) AS [File Type], DIV(SUM(sc-bytes), 1024) AS [Sent (KB)], DIV(SUM(cs-bytes), 1024) AS [Received (KB)] INTO FileTypeDataSentRec.txt FROM ex0902*.log GROUP BY [File Type] ORDER BY [File Type]"
Exemplo 6: Retorna a lista de dominios que geraram acesso para o site
logparser -rtp:-1 "SELECT EXTRACT_TOKEN(cs(Referer), 2, '/') AS [Domain], COUNT(*) AS [Requests] INTO ReferringDomains.txt FROM ex0902*.log GROUP BY [Domain] ORDER BY [Requests] DESC"
Exemplo 7: Retorna a lista das requisições por hore e dia.
logparser -rtp:-1 "SELECT TO_TIME(TO_LOCALTIME(QUANTIZE(TO_TIMESTAMP(date, time), 3600))) AS [Hour], COUNT(*) AS [Requests], MUL(PROPCOUNT(*), 100) AS [PercentOfTotal] INTO HourlyReport.txt FROM ex0902*.log GROUP BY [Hour] ORDER BY [Hour]"
4. Utilizando o LogParser no seu código.Você pode utilizar o LogParser em seu código C# da seguinte maneira:
using MSUtil;
(...)
ILogRecordset rsLP = null;
ILogRecord rowLP = null;
LogQueryClassClass LogParser = null;
COMW3CInputContextClassClass W3Clog = null;
string strSQL = null;
LogParser = new LogQueryClassClass();
W3Clog = new COMW3CInputContextClassClass();
double UsedBW = 0;
try
{
strSQL = @"SELECT SUM(sc-bytes) from C:\\logs" +
@"\\*.log WHERE cs-uri-stem LIKE '%/" +
userID + "/%' ";
rsLP = LogParser.Execute(strSQL, W3Clog);
rowLP = rsLP.getRecord();
if (rowLP.getValue(0).ToString() == "0" ||
rowLP.getValue(0).ToString() == "")
{
UsedBW = 0;
return UsedBW;
}
double Bytes = Convert.ToDouble(rowLP.getValue(0).ToString());
UsedBW = Bytes / (1024 * 1024);
UsedBW = Math.Round(UsedBW, 3);
}
catch
{
throw;
}