import logging
import sys
log_fmt = 'brbuild: %(message)s'
# Initilaize log here
# TODO may need to flush
logging.basicConfig(filename="logtest",
level=logging.DEBUG,
format=log_fmt,
datefmt='%H:%M:%S',
filemode='a')
# capture stdout to log
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(logging.DEBUG)
log_fmt = logging.Formatter(log_fmt)
ch.setFormatter(log_fmt)
logging.getLogger("logtest").addHandler(ch)
logging.info("using logging")
print "using stdout"
对数检验
^{pr2}$如何让"using stdout"
也写入日志?在
这是一种黑客攻击,但您可以在当前模块中重新定义
print
,其他模块可以执行from foo import print
来使用它。在为了简单起见,在这个例子中我没有使用文件句柄,而是使用stdout/stderr。如果您使用文件,您仍然可以向新的
print
函数添加sys.stdout.write(msg+os.linesep)
语句。在{{cd1}可能不支持多个新的参数。在
(必须用括号括起来)。结果:
^{pr2}$如果您的意图是将
print
输出(即重定向sys.stdout
)重定向到logger,或者重定向到logger和标准输出,则需要创建一个类来模拟类似文件的对象来完成此操作,并将该类文件类的一个实例分配给系统标准输出. 在相关问题 更多 >
编程相关推荐