我有一个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)
发布于 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!')
发布于 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
发布于 2012-06-21 00:54:58
您真的应该通过另一种方式来实现这一点:根据设置,调整日志配置以使用print
语句或其他方式。不要覆盖print
行为,因为将来可能会引入一些设置(例如,由您或使用您的模块的其他人)可能实际上将其输出到stdout
,您将会遇到问题。
有一个处理程序可以将您的日志消息重定向到适当的流(文件、stdout
或任何其他类似文件的内容)。它被称为StreamHandler
,并与logging
模块捆绑在一起。
因此,在我看来,基本上您应该做您声明不想做的事情:用实际的日志记录替换print
语句。
https://stackoverflow.com/questions/11124093
复制相似问题