flask logging 不及时写入日志文件

问题描述

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文件中

慕容森
浏览 1680回答 1
1回答

慕田峪9158850

其实这个可能和 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通常是无缓冲的,因为它必须尽快输出。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python