【问题标题】:Trouble with duplicate lines of logs in log file日志文件中重复的日志行问题
【发布时间】:2012-01-23 15:05:14
【问题描述】:

我整天都在努力让它正常工作,它几乎完成了,只是我遇到了一个奇怪的问题。在搜索查询中找到的每个结果都会按预期记录,但第一个结果记录一次,第二个记录两次,第三个记录三次,依此类推。

任何想法如何摆脱重复? Example of logs

#!/usr/bin/python
import urllib
import simplejson 
import logging
from logging.handlers import SysLogHandler

query = urllib.urlencode({'q' : 'test'})
url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' \
      % (query)
search_results = urllib.urlopen(url)
json = simplejson.loads(search_results.read())
results = json['responseData']['results']
for i in results:
    logger = logging.getLogger()
    logger.addHandler(SysLogHandler(address=('192.168.0.2', 514)))
    logger.addHandler(logging.FileHandler("hits.log"))
    logging.warn(i['url'])
    print i['url']

【问题讨论】:

  • @Gurney:我不同意,这个问题每行都翻了一番。 答案可能相对相似,但它们是足够不同的问题,我认为“重复”不太正确。
  • @sarnold:好吧,我不会在那里和你争论,但 IMO 这是同一个问题:代码不止一次地添加了一个处理程序,结果你得到了重复的日志输出。在这方面,您多次调用 addHandler 的方式无关紧要。

标签: python


【解决方案1】:

因为您每次都在 for 循环中添加一个新的处理程序。在循环外执行此操作,然后只在循环内执行实际的logging.warn

【讨论】:

  • 好吧,它还没有回答,这就是为什么如果我只有 logging.warn(i['url']) 在循环中它无法写入系统日志,它没有显示出来
【解决方案2】:

我有类似的问题,但我每次都需要在 for 循环中添加一个新的处理程序。所以在循环中删除处理程序对我没有帮助。

当你像这样创建处理程序时:

hdl = logging.FileHandler("hits.log")

你需要像这样删除它:

logger.removeHandler(hdl)

【讨论】:

    【解决方案3】:

    由于你没有接受答案,正如丹尼尔所说,你需要有

    logger = logging.getLogger('')
    logger.addHandler(logging.FileHandler("hits.log"))
    logger.addHandler(SysLogHandler(address=('192.168.0.2', 514)))
    

    for loop之外。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多