5.9 重定向标准输出到日志 ======================== .. image:: http://image.iswbm.com/20200804124133.png 假设你有一个脚本,会执行一些任务,比如说集群健康情况的检查。 检查完成后,会把各服务的的健康状况以 JSON 字符串的形式打印到标准输出。 如果代码有问题,导致异常处理不足,最终检查失败,是很有可能将一些错误异常栈输出到标准错误或标准输出上。 由于最初约定的脚本返回方式是以 JSON 的格式输出,此时你的脚本却输出各种错误异常,异常调用方也无法解析。 如何避免这种情况的发生呢? 我们可以这样做,把你的标准错误输出到日志文件中。 .. code:: python 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()