5.9 重定向标准输出到日志

http://image.iswbm.com/20200804124133.png

假设你有一个脚本,会执行一些任务,比如说集群健康情况的检查。

检查完成后,会把各服务的的健康状况以 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()