python教程—python日志会刷新每个日志吗?-Python实用宝典

python教程—python日志会刷新每个日志吗?

当我使用标准模块日志将日志写入文件时,是否会将每个日志分别刷新到磁盘? 例如,下面的代码会刷新日志10倍吗?

当我使用标准模块logging将日志写入文件时,是否会将每个日志分别刷新到磁盘?
例如,下面的代码会刷新日志10倍吗?

    logging.basicConfig(level=logging.DEBUG, filename='debug.log') for i in xrange(10): logging.debug("test")

如果是这样,它会减速吗?

回答

是的,它确实在每次调用时刷新输出。你可以在StreamHandler的源代码中看到:

    def flush(self): """ Flushes the stream. """ self.acquire() try: if self.stream and hasattr(self.stream, "flush"): self.stream.flush() finally: self.release() def emit(self, record): """ Emit a record. If a formatter is specified, it is used to format the record. The record is then written to the stream with a trailing newline. If exception information is present, it is formatted using traceback.print_exception and appended to the stream. If the stream has an 'encoding' attribute, it is used to determine how to do the output to the stream. """ try: msg = self.format(record) stream = self.stream stream.write(msg) stream.write(self.terminator) self.flush() # <--- except (KeyboardInterrupt, SystemExit): #pragma: no cover raise except: self.handleError(record)

我并不介意日志记录的性能,至少在进行分析并发现它是一个瓶颈之前是这样。无论如何,您总是可以创建一个处理程序子类,它不会在每次发出调用时执行刷新(即使如果出现错误的异常/解释器崩溃,您将冒丢失大量日志的风险)。

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
0

发表评论