日志文件中重复日志行的问题

5 投票
3 回答
2598 浏览
提问于 2025-04-17 10:54

我今天一直在努力让这个功能正常工作,现在快完成了,但遇到了一个奇怪的问题。每次搜索到的结果都会按预期记录下来,但第一个结果只记录一次,第二个结果记录两次,第三个结果记录三次,依此类推。

有没有什么办法可以去掉这些重复的记录呢? 这是日志的例子

#!/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']

3 个回答

4

正如丹尼尔所说,因为你还没有接受这个答案,你需要在

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

这个代码块外面放置在for循环之外。

5

我遇到过类似的问题,但我需要在循环中每次都添加一个新的处理器。所以在循环里移除处理器对我没有帮助。

当你像这样创建处理器时:

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

你需要像这样移除它:

logger.removeHandler(hdl)
5

因为你在循环里每次都在添加一个新的处理程序。把这个操作放到循环外面去,然后在循环里面只做真正的 logging.warn 记录就可以了。

撰写回答