我使用logging
模块(logger.info
、logger.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
这样的低级解决方案吗?
1条答案
按热度按时间ego6inou1#
你可以使用本书中描述的方法把日志记录器当作输出流,然后重定向
sys.std{out,err}
以记录写入其中的内容,当然,你可以配置日志记录使用你想要的任何格式,包括一个日期-时间前缀,以通常的方式使用例如%(asctime)s
的格式。