如何解决python 记录到 stdout 和 stderr
我正在使用 python 日志记录:
logging.basicConfig(stream=sys.stdout,level=logging.INFO,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
log = logging.getLogger()
一切正常。唯一的问题是所有日志消息都打印到 stdout 和 stderr。 stdout 的格式如我所料。 stderr 只是在错误流中打印消息本身。
我看到 log.handlers
确实包含 2 个处理程序。删除 stderr 似乎没有效果。尝试过这样的事情:
for handler in log.handlers:
if handler.stream and handler.stream.name == '<stderr>':
log.handlers.remove(handler)
有什么办法可以解决这个问题?
解决方法
您可以使用logging.StreamHandler()
就这样:
logging.basicConfig(handlers=[logging.StreamHandler()],level=logging.INFO,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
log = logging.getLogger()
如果您还想达到某个级别,则将转到 stderr(仅错误或错误和警告)和其他 stdout。您可以执行@crosswired 在此处建议的操作:
logger = logging.getLogger("__name__")
logger.setLevel(logging.DEBUG)
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
formatter = logging.Formatter(format)
h1 = logging.StreamHandler(sys.stdout)
h1.setLevel(logging.DEBUG)
h1.addFilter(lambda record: record.levelno <= logging.INFO)
h1.setFormatter(formatter)
h2 = logging.StreamHandler()
h2.setLevel(logging.WARNING)
h2.setFormatter(formatter)
logger.addHandler(h1)
logger.addHandler(h2)
logger.info("info")
logger.error("error")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。