【问题标题】:Log Parser 2.2 skipping today's IIS logsLog Parser 2.2 跳过今天的 IIS 日志
【发布时间】:2015-09-11 04:26:17
【问题描述】:

我试图通过使用 Log Parser 2.2 解析我们的 IIS 日志来计算我们网站上特定 URL 的点击次数。一切似乎都运行良好,只是它对时间戳的处理让我非常困惑。

IIS 日志具有以 UTC 时间表示的所有时间戳。因此,在我的应用程序中,我在将服务器时间插入查询之前将其转换为 UTC。但是,当我尝试查询当天的数据时,尽管我看到了日志文件中的记录,但我得到的计数为零。我尝试运行以获取当天所有内容的生成查询如下所示(查询在 2009 年 11 月 11 日运行,我使用的是亚利桑那时间):

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

由于某种原因,当前日期的数据似乎被跳过了。查询较早的日期时,我可以很好地取回数据。为什么会这样?

【问题讨论】:

    标签: iis utc logparser


    【解决方案1】:

    雅各布, 谢谢你的帖子。我在比较 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')  
    

    【讨论】:

    • 很高兴它有所帮助,并且您找到了更好的方法。
    • 快速评论.. 日期格式字符串是区分大小写的,写 'yyyy-mm-dd' 会让你浪费 15 分钟的时间来找出 LogParser 日期被破坏的原因。叹息。
    【解决方案2】:

    事实证明,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'
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-27
        • 1970-01-01
        • 2016-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多