1

是否可以将 Python 解释器报告的所有错误转储到存储为 say 的日志中,/var/log/python.log而不管是什么脚本/命令导致它们?如果可能的话,最好的方法是什么?

4

2 回答 2

2

好的,诚然重定向 stderr 可能不是最好的答案。所以另一种解决方案是使用sys.excepthook.

下面是一个使用它的例子。

import sys
import logging
import traceback

LOGFILE = '/var/log/python.log'

def log_uncaught_exceptions(ex_cls, ex, tb):
    logging.critical(''.join(traceback.format_tb(tb)))
    logging.critical('{0}: {1}'.format(ex_cls, ex))

def main():
    raise Exception


if __name__ == '__main__':
    logging.basicConfig(
        level=logging.DEBUG,
        filename=LOGFILE,
        filemode='w')

    sys.excepthook = log_uncaught_exceptions

    main()

与重定向 stderr 不同,它只会记录来自解释器的错误,而不是脚本输出到 std* 的任何其他内容。

查看此链接以获取更多详细信息。

于 2013-07-04T20:22:28.783 回答
1

只需重定向标准错误。

python script.py 2> /var/log/python.log

于 2013-07-04T19:52:24.300 回答