Int*_*eer 7 c# vb.net iis logparser iis-logs
我试图确定用户是否使用MS Log Parser 2.2从FTP下载了一个文件
虽然我已经使用了几个样本查询,但我还是无法获得解析器SQL查询.
Water Down Parser Query不起作用:
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 Code Online (Sandbox Code Playgroud)
错误:
RecordSet cannot be used at this time [Unknown Error]
Run Code Online (Sandbox Code Playgroud)
题:
如何创建查询:
- SELECT Date and Time of download
- Where user = 'xxx'
- WHERE RETR = is a download
- WHERE Filename = u_ex150709.log or xxx
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
就像你一样,我编写了利用 LogParser 的工具,例如 http://eventanalysisr.appointmentsbook.com/
虽然早在 2004 年(使用 .Net 1.1)我并没有下载的好处: https: //visuallogparser.codeplex.com/
检查他们的源代码,让您的查询在其中运行(VisualLogParser),然后在您的项目中简单地引用它并享受开源社区的好处。
至于您有关 FTP leeching 的查询,请参阅 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
Run Code Online (Sandbox Code Playgroud)
当查看我创建的 GUI 来动态创建的查询时,关于您的查询的一件事确实很突出,您在文件路径周围缺少单引号:
strSQL = strSQL & "FROM C:\temp\Log\*.log "
Run Code Online (Sandbox Code Playgroud)
尝试这个:
strSQL = strSQL & "FROM 'C:\temp\Log\*.log' "
Run Code Online (Sandbox Code Playgroud)
(并使用 StringBuilder,而不是字符串连接......只是为了养成最佳实践的习惯)
按照:
如果引号不能首先解决问题,请尝试使用单个日志文件而不是通配符
*.log
来缩小语法错误的范围。LogParser 的设计目的并不是帮助诊断问题查询,而是 Gabriele Giuseppini 将其设计为快速,非常快!