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

flask logging 不及時(shí)寫(xiě)入日志文件

問(wèn)題描述

flask logging 不及時(shí)寫(xiě)入日志文件

相關(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é)果是什么?實(shí)際看到的錯(cuò)誤信息又是什么?

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

回答
編輯回答
旖襯

其實(shí)這個(gè)可能和 flask 沒(méi)多大關(guān)系,因?yàn)樵?python系統(tǒng) 的層面,對(duì)于文件IO有個(gè)緩沖的概念,為了減少等待 IO。

又因?yàn)槟銓?xiě)的是文件,緩沖策略是 全緩沖,所以會(huì)等到緩沖區(qū)滿或者手動(dòng) flush 才會(huì)提交給系統(tǒng)寫(xiě)隊(duì)列,然后再落盤(pán)。緩沖區(qū)的大小隨系統(tǒng)而定,不過(guò)一般是 4096 字節(jié)。

相關(guān)信息:

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