首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将Python 'print‘输出重定向到记录器

将Python 'print‘输出重定向到记录器
EN

Stack Overflow用户
提问于 2012-06-21 00:35:32
回答 5查看 69.5K关注 0票数 44

我有一个Python脚本,它使用'Print‘打印到stdout。我最近通过Python Logger添加了日志记录,如果启用了日志记录,我想让这些print语句转到logger。我不想修改或删除这些print语句。

我可以通过执行'log.info("some info msg")‘来登录。我希望能够做这样的事情:

if logging_enabled:
  sys.stdout=log.info
print("test")

如果启用了日志记录,“log.info”应该像测试一样被记录下来( "test“)。如果没有启用日志记录,"test“应该只显示在屏幕上。

这个是可能的吗?我知道我可以用类似的方式将标准输出定向到文件(参见:redirect prints to log file)

EN

回答 5

Stack Overflow用户

发布于 2013-07-17 00:52:08

当然,您既可以打印到标准输出,也可以添加到日志文件,如下所示:

# Uncomment the line below for python 2.x
#from __future__ import print_function

import logging

logging.basicConfig(level=logging.INFO, format='%(message)s')
logger = logging.getLogger()
logger.addHandler(logging.FileHandler('test.log', 'a'))
print = logger.info

print('yo!')
票数 22
EN

Stack Overflow用户

发布于 2017-10-28 02:29:58

一个简单得多的选择,

import logging, sys
logging.basicConfig(filename='path/to/logfile', level=logging.DEBUG)
logger = logging.getLogger()
sys.stderr.write = logger.error
sys.stdout.write = logger.info
票数 12
EN

Stack Overflow用户

发布于 2012-06-21 00:54:58

您真的应该通过另一种方式来实现这一点:根据设置,调整日志配置以使用print语句或其他方式。不要覆盖print行为,因为将来可能会引入一些设置(例如,由您或使用您的模块的其他人)可能实际上将其输出到stdout,您将会遇到问题。

有一个处理程序可以将您的日志消息重定向到适当的流(文件、stdout或任何其他类似文件的内容)。它被称为StreamHandler,并与logging模块捆绑在一起。

因此,在我看来,基本上您应该做您声明不想做的事情:用实际的日志记录替换print语句。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11124093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档