在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python  網(wǎng)絡(luò)安全/ flask logging 不及時寫入日志文件

flask logging 不及時寫入日志文件

問題描述

flask logging 不及時寫入日志文件

相關(guān)代碼

    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')

你期待的結(jié)果是什么?實際看到的錯誤信息又是什么?

即時寫入log文件,好查看錯誤,現(xiàn)在是關(guān)閉或重啟才能寫入到log文件中

回答
編輯回答
旖襯

其實這個可能和 flask 沒多大關(guān)系,因為在 python系統(tǒng) 的層面,對于文件IO有個緩沖的概念,為了減少等待 IO。

又因為你寫的是文件,緩沖策略是 全緩沖,所以會等到緩沖區(qū)滿或者手動 flush 才會提交給系統(tǒng)寫隊列,然后再落盤。緩沖區(qū)的大小隨系統(tǒng)而定,不過一般是 4096 字節(jié)。

相關(guān)信息:

標(biāo)準(zhǔn)I/O提供緩沖的目的就是減少調(diào)用read和write的次數(shù),它對每個I/O流自動進(jìn)行緩存管理(標(biāo)準(zhǔn)I/O函數(shù)通常調(diào)用malloc來分配緩存)。它提供了三種類型的緩沖:
    1) 全緩沖。當(dāng)填滿標(biāo)準(zhǔn)I/O緩存后才執(zhí)行I/O操作。磁盤上的文件通常是全緩沖的。
    2) 行緩存沖當(dāng)輸入輸出遇到新行符或緩沖滿時,才由標(biāo)準(zhǔn)I/O庫執(zhí)行實際I/O操作。stdin、stdout通常是行緩沖的。
    3) 無緩沖。相當(dāng)于read、write了。stderr通常是無緩沖的,因為它必須盡快輸出。
2018年7月11日 21:23