为了账号安全,请及时绑定邮箱和手机立即绑定

flask logging 不及时写入日志文件

flask logging 不及时写入日志文件

慕容森 2019-02-18 19:36:36
问题描述 flask logging 不及时写入日志文件 相关代码 handler = logging.FileHandler('flask.log', encoding='UTF-8') handler.setLevel(logging.DEBUG) logging_format = logging.Formatter( '%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s') handler.setFormatter(logging_format) app.logger.addHandler(handler) current_app.logger.debug('A value for debugging') current_app.logger.warning('A warning occurred (%d apples)', 42) current_app.logger.error('An error occurred') 你期待的结果是什么?实际看到的错误信息又是什么? 即时写入log文件,好查看错误,现在是关闭或重启才能写入到log文件中
查看完整描述

1 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

其实这个可能和 flask 没多大关系,因为在 python系统 的层面,对于文件IO有个缓冲的概念,为了减少等待 IO。

又因为你写的是文件,缓冲策略是 全缓冲,所以会等到缓冲区满或者手动 flush 才会提交给系统写队列,然后再落盘。缓冲区的大小随系统而定,不过一般是 4096 字节。

相关信息:

标准I/O提供缓冲的目的就是减少调用read和write的次数,它对每个I/O流自动进行缓存管理(标准I/O函数通常调用malloc来分配缓存)。它提供了三种类型的缓冲:
    1) 全缓冲。当填满标准I/O缓存后才执行I/O操作。磁盘上的文件通常是全缓冲的。
    2) 行缓存冲当输入输出遇到新行符或缓冲满时,才由标准I/O库执行实际I/O操作。stdin、stdout通常是行缓冲的。
    3) 无缓冲。相当于read、write了。stderr通常是无缓冲的,因为它必须尽快输出。
查看完整回答
反对 回复 2019-03-01
  • 1 回答
  • 0 关注
  • 1679 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信