python 将stderr记录到文件,前缀为datetime

yxyvkwin  于 2023-01-12  发布在  Python
关注(0)|答案(1)|浏览(112)

我使用logging模块(logger.infologger.debug ...)进行了适当的日志记录,并将其写入文件。
但在某些极端情况下(外部模块、未捕获的异常等),我有时仍会将错误写入stderr
我将其记录到一个文件中:

import sys
sys.stdout, sys.stderr = open("stdout.log", "a+", buffering=1), open("stderr.log", "a+", buffering=1)
print("hello")
1/0

它可以工作,但是如何在每个错误之前记录日期时间?

注:我想避免使用logging的这一部分,但更低的水平。
我也想避免这种解决方案:

def exc_handler(ex_cls, ex, tb):
    with open('mylog.log', 'a') as f:
        dt = time.strftime('%Y-%m-%d %H:%M:%S')
        f.write(f"{dt}\n")
        traceback.print_tb(tb, file=f)
        f.write(f"{dt}\n")

sys.excepthook = exc_handler

因为一些外部模块可能会覆盖它。有像覆盖sys.stderr.print这样的低级解决方案吗?

ego6inou

ego6inou1#

你可以使用本书中描述的方法把日志记录器当作输出流,然后重定向sys.std{out,err}以记录写入其中的内容,当然,你可以配置日志记录使用你想要的任何格式,包括一个日期-时间前缀,以通常的方式使用例如%(asctime)s的格式。

相关问题