问题描述
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通常是无缓冲的,因为它必须尽快输出。
添加回答
举报
0/150
提交
取消