5.9 重定向标准输出到日志¶
假设你有一个脚本,会执行一些任务,比如说集群健康情况的检查。
检查完成后,会把各服务的的健康状况以 JSON 字符串的形式打印到标准输出。
如果代码有问题,导致异常处理不足,最终检查失败,是很有可能将一些错误异常栈输出到标准错误或标准输出上。
由于最初约定的脚本返回方式是以 JSON 的格式输出,此时你的脚本却输出各种错误异常,异常调用方也无法解析。
如何避免这种情况的发生呢?
我们可以这样做,把你的标准错误输出到日志文件中。
import contextlib
log_file="/var/log/you.log"
def you_task():
pass
@contextlib.contextmanager
def close_stdout():
raw_stdout = sys.stdout
file = open(log_file, 'a+')
sys.stdout = file
yield
sys.stdout = raw_stdout
file.close()
with close_stdout():
you_task()