为了账号安全,请及时绑定邮箱和手机立即绑定

使Python记录器将除日志文件外的所有消息输出到stdout

使Python记录器将除日志文件外的所有消息输出到stdout

阿波罗的战车 2019-10-04 16:01:21
除了应该将日志文件放到哪里,是否有办法使用该logging模块使Python日志自动输出到stdout ?例如,我想所有呼叫,,去他们预期的地方,但除了总是被复制到。这是为了避免重复消息,例如:logger.warninglogger.criticallogger.errorstdoutmylogger.critical("something failed")print "something failed"
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

所有日志记录输出均由处理程序处理;只需logging.StreamHandler()在根记录器中添加一个即可。


这是配置流处理程序(使用stdout而不是默认值stderr)并将其添加到根记录器的示例:


import logging

import sys


root = logging.getLogger()

root.setLevel(logging.DEBUG)


handler = logging.StreamHandler(sys.stdout)

handler.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

handler.setFormatter(formatter)

root.addHandler(handler)


查看完整回答
反对 回复 2019-10-04
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

您可以为file和stdout创建两个处理程序,然后创建一个handlers参数为的记录器basicConfig。如果两个处理程序具有相同的log_level和format输出,则可能会很有用:


import logging

import sys


file_handler = logging.FileHandler(filename='tmp.log')

stdout_handler = logging.StreamHandler(sys.stdout)

handlers = [file_handler, stdout_handler]


logging.basicConfig(

    level=logging.DEBUG, 

    format='[%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s',

    handlers=handlers

)


logger = logging.getLogger('LOGGER_NAME')


查看完整回答
反对 回复 2019-10-04
  • 3 回答
  • 0 关注
  • 548 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信