我正在尝试通过使用Log Parser 2.2解析我们的IIS日志来计算我们网站上特定URL的点击次数。一切似乎都运行良好,除了它对时间戳的处理让我很困惑。
IIS日志包含以UTC时间表示的所有时间戳。因此,在我的应用程序中,我将服务器的时间转换为UTC,然后将其插入查询。但是,当我尝试查询当天的数据时,尽管我在日志文件中看到了记录,但仍然返回零计数。生成的查询我尝试运行以获取当天的所有内容看起来像这样(查询运行于11/11/2009,我正在使用亚利桑那州时间):
SELECT COUNT(*)
FROM \\Server\IIS Logs\LogFiles\W3SVC1\u_ex*.log
WHERE
cs-method = 'GET'
AND cs(Referer) NOT LIKE '%ntorus%'
AND c-ip NOT LIKE '192%'
AND c-ip NOT LIKE '127%'
AND (
cs-uri-stem = '/'
OR cs-uri-stem = '/myurl')
AND sc-status BETWEEN 200 AND 299
AND date BETWEEN
TIMESTAMP('2009-11-11 07:00', 'yyyy-MM-dd hh:mm')
AND TIMESTAMP('2009-11-12 07:00', 'yyyy-MM-dd hh:mm')
看起来由于某种原因,当前的数据被跳过了。在查询更早的日期时,我回复数据就好了。为什么会这样?
答案 0 :(得分:2)
雅各 谢谢你的帖子。我也无法比较IIS日志中的日期/时间。通过结合您的问题和解决方案,我能够在没有TO_STRING的情况下进行搜索。
TO_TIMESTAMP(date, time)
BETWEEN TIMESTAMP('2009-11-11 07:00', 'yyyy-MM-dd hh:mm')
AND TIMESTAMP('2009-11-12 07:00', 'yyyy-MM-dd hh:mm')
完整来源:
SELECT COUNT(*)
FROM \\Server\IIS Logs\LogFiles\W3SVC1\u_ex*.log
WHERE
cs-method = 'GET'
AND cs(Referer) NOT LIKE '%ntorus%'
AND c-ip NOT LIKE '192%'
AND c-ip NOT LIKE '127%'
AND (
cs-uri-stem = '/'
OR cs-uri-stem = '/myurl')
AND sc-status BETWEEN 200 AND 299
AND TO_TIMESTAMP(date, time)
BETWEEN TIMESTAMP('2009-11-11 07:00', 'yyyy-MM-dd hh:mm')
AND TIMESTAMP('2009-11-12 07:00', 'yyyy-MM-dd hh:mm')
答案 1 :(得分:1)
事实证明,Log Parser没有正确地进行时间戳比较。但是,当我将时间戳转换为字符串时,字符串比较工作正常。这是修改后的查询的样子:
SELECT COUNT(*)
FROM \\Server\IIS Logs\LogFiles\W3SVC1\u_ex*.log
WHERE
cs-method = 'GET'
AND cs(Referer) NOT LIKE '%ntorus%'
AND c-ip NOT LIKE '192%'
AND c-ip NOT LIKE '127%'
AND (
cs-uri-stem = '/'
OR cs-uri-stem = '/myurl')
AND sc-status BETWEEN 200 AND 299
AND TO_STRING(TO_TIMESTAMP(date, time), 'yyyy-MM-dd hh:mm')
BETWEEN '2009-11-11 07:00' AND '2009-11-12 07:00'
答案 2 :(得分:1)
Log Parser具有将时间从UTC转换为本地的功能:
AND TO_LOCALTIME(TO_TIMESTAMP(date, time))
BETWEEN TIMESTAMP('2009-11-11 03:00', 'yyyy-MM-dd hh:mm')
AND TIMESTAMP('2009-11-12 03:00', 'yyyy-MM-dd hh:mm')