我设置了以下日志记录:
import logging
logging.basicConfig(level=logging.DEBUG,
format='[%(asctime)s] - %(funcName)s - %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='/tmp/affiliate.log',
filemode='w')
我如何转换以下两个语句 - 写入日志文件然后打印输出:
logging.debug('>>>>> 401 Error: Cannot download file')
print '>>>>> 401 Error: Cannot download file'
进入一个同时执行这两个操作的日志语句?
答案 0 :(得分:6)
你不能只用basicConfig
(至少在Python 2.7中没有; 3.3添加新功能,特别是handlers
参数),但是设置记录器很容易写到两个地方。 Logging Cookbook解释了如何详尽地完成各种事情。
一些菜谱条目没有完整解释,只是演示了,但您始终可以在logging
文档中查找详细信息。
您在这里寻找的关键是创建两个处理程序 - FileHandler('/tmp/affiliate.log')
和StreamHandler(sys.stdout)
。
如果您希望日志文件和stdout
中的格式,日志级别等相同,one of the early examples in the cookbook就会执行此操作,但stderr
除外。如果您想要各自的格式the very next example does that。
所以,而不是:
logging.basicConfig(level=logging.DEBUG,
format='[%(asctime)s] - %(funcName)s - %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='/tmp/affiliate.log',
filemode='w')
这样做:
logger = logging.getLogger('')
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler('/tmp/affiliate.log')
sh = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter('[%(asctime)s] - %(funcName)s - %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S')
fh.setFormatter(formatter)
sh.setFormatter(formatter)
logger.addHandler(fh)
logger.addHandler(sh)
请注意,我链接的第二个示例使用basicConfig
执行它可以执行的所有操作,然后在其上添加第二个处理程序。我认为这有点不太清楚,但如果你想做同样的事情,你就可以做到。