2015-08-04 6 views
7

Я пытаюсь определить, если пользователь загрузил файл с FTP с помощью MS Log Parser 2,2MS Log Parser 2.2 Query Error

Я не был в состоянии получить парсер SQL запрос идет, хотя я использовал несколько образцов запросов ,

воды вниз Parser Запрос не работает:

strSQL = "SELECT date,COUNT(*) AS downloads,c-ip " 
strSQL = strSQL & "FROM C:\temp\Log\*.log " 
strSQL = strSQL & "WHERE cs-method='RETR' " 
strSQL = strSQL & "GROUP BY date,c-ip " 

Ошибка:

RecordSet cannot be used at this time [Unknown Error] 

Вопрос:

Как создать запрос:

- SELECT Date and Time of download 
- Where user = 'xxx' 
- WHERE RETR = is a download 
- WHERE Filename = u_ex150709.log or xxx 

Ответы в C# также приветствуется

VB.net Код:

Dim rsLP As ILogRecordset = Nothing 
Dim rowLP As ILogRecord = Nothing 

Dim LogParser As LogQueryClassClass = Nothing 
Dim W3Clog As COMW3CInputContextClassClass = Nothing 

Dim UsedBW As Double = 0 
Dim Unitsprocessed As Integer 

Dim strSQL As String = Nothing 

LogParser = New LogQueryClassClass() 
W3Clog = New COMW3CInputContextClassClass() 

Try 

strSQL = "SELECT date,COUNT(*) AS downloads,c-ip " 
strSQL = strSQL & "FROM C:\temp\Log\*.log " 
strSQL = strSQL & "WHERE cs-method='RETR' " 
strSQL = strSQL & "GROUP BY date,c-ip " 

'run the query against W3C log 
rsLP = LogParser.Execute(strSQL, W3Clog) 

'Error occurs in the line below 
rowLP = rsLP.getRecord() 
+0

Можете ли вы предоставить журналы выборок? –

+0

Каково значение 'rsLP.atEnd()' перед вызовом последней строки? –

ответ

3

Just like you I've written tools that leverage LogParser, eg http://eventanalyser.appointmentsbook.com/

Хотя еще в 2004 году (с использованием .NET 1.1) Я не имел преимущество загрузки: https://visuallogparser.codeplex.com/

Проверьте исходный код, получите запрос работая в нем (VisualLogParser), а затем просто ссылайтесь на него в своем проекте и наслаждайтесь добротой сообщества open source.

Что касается запроса о FTP пиявок, вот статья MSDN: http://blogs.msdn.com/b/robert_mcmurray/archive/2010/09/02/detecting-ftp-leeches-with-logparser.aspx

SELECT date,COUNT(*) AS downloads,c-ip,x-session 
FROM *.log 
WHERE cs-method='RETR' 
GROUP BY date,c-ip,x-session 
HAVING COUNT(*) > 100 

Одна вещь действительно выделяется о запросе при взгляде на один-х я создал графический интерфейс для динамического создания, вы» повторно отсутствующими одинарные кавычки вокруг пути к файлу:

strSQL = strSQL & "FROM C:\temp\Log\*.log " 

Попробуйте это:

strSQL = strSQL & "FROM 'C:\temp\Log\*.log' " 

(и использовать StringBuilder, а не конкатенации ... только, чтобы получить в привычку лучшей практики)

По:

enter image description here

If the quotes don't solve the problem first go, then try a single log file rather than the wildcard *.log to narrow down on the syntax error. LogParser isn't designed to be helpful at diagnosing problem queries, instead Gabriele Giuseppini designed it to be fast, very fast !