寫(xiě)入到日志文件
上面我們說(shuō)的是將日志打印到控制臺(tái)中,但是我們Python代碼寫(xiě)完并且在運(yùn)行當(dāng)中后,我們就不可能這樣玩了,所以我們需要將日志保存到一個(gè)日志文件中
完整代碼如下:
import coloredlogs
import logging
def func_name():
# 創(chuàng)建文件handler
file_handler = logging.FileHandler('log_file.log')
# 設(shè)置日志格式
formatter = logging.Formatter('%(asctime)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
# 安裝coloredlogs并設(shè)置級(jí)別
level_styles = coloredlogs.DEFAULT_LEVEL_STYLES.copy()
coloredlogs.install(level="DEBUG", level_styles=level_styles,
fmt='%(asctime)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s')
# 獲取logger 并添加文件handler
logger = logging.getLogger()
logger.addHandler(file_handler)
# 移除默認(rèn)StreamHandler
logger.removeHandler(logging.StreamHandler())
# 測(cè)試輸出日志
logger.debug('debug message')
logger.info('info message')
logger.error('error message')
logger.warning('warning message')
func_name()
打開(kāi)我們log_file.log文件后,就可以看到我們生成的日志信息

可以看到我們生成的日志文件中不同級(jí)別的日志還是使用的是一樣的顏色。那這是為什么呢?
其實(shí)coloredlogs 庫(kù)只是在終端輸出時(shí)給日志添加了顏色,但寫(xiě)入文件時(shí)colors并不能保留。
這是因?yàn)榻K端輸出和文件輸出使用的是不同的handler:
- 終端輸出使用的是StreamHandler,可以 interpreter 處理ANSI色彩編碼顯示顏色。
- 文件輸出使用的是FileHandler,寫(xiě)入的僅是純文本,無(wú)法保存ANSI編碼的顏色信息。
ANSI色彩編碼只有在支持其的終端才能渲染為顏色,一旦寫(xiě)入文件就會(huì)失去這些編碼信息。所以使用coloredlogs時(shí),日志文件內(nèi)實(shí)際保存的是未著色的原始文本。
如果想要文件中也保存顏色信息,可以考慮使用支持ANSI色彩的文件格式,比如HTML。然后通過(guò)logging模塊支持的HTML Formatter輸出彩色日志到HTML文件中,不過(guò)這種情況下就失去了純文本文件的可閱讀性。
綜上,coloredlogs只是在終端美化日志展示效果,文件輸出不保存顏色是正常情況。如果必須存儲(chǔ)顏色,可以輸出為HTML等格式,但復(fù)雜度會(huì)增加。
-
文件
+關(guān)注
關(guān)注
1文章
594瀏覽量
26054 -
日志
+關(guān)注
關(guān)注
0文章
146瀏覽量
11063 -
python
+關(guān)注
關(guān)注
57文章
4876瀏覽量
90028
發(fā)布評(píng)論請(qǐng)先 登錄
模組日志功能技術(shù)概覽
RT-Thread ULOG: 創(chuàng)建多個(gè)文件后端并保存不同日志方法 | 技術(shù)集結(jié)
Termux中調(diào)試圣誕樹(shù)Python代碼
電能質(zhì)量在線監(jiān)測(cè)裝置數(shù)據(jù)日志能加密存儲(chǔ)嗎?
使用ulog 寫(xiě)入日志到文件系統(tǒng),無(wú)法使用cat命令讀取文件內(nèi)容怎么解決?
使用littlefs存儲(chǔ)ulog日志,然后讀日志文件會(huì)出錯(cuò),為什么?
文件系統(tǒng)的文件怎么循環(huán)覆蓋的寫(xiě)入數(shù)據(jù)?
termux如何搭建python游戲
python app不能運(yùn)行怎么解決?
詳解journalctl日志管理
跟老齊學(xué)Python:從入門(mén)到精通
基于RV1126開(kāi)發(fā)板限制系統(tǒng)日志大小教程
Python寫(xiě)入到日志文件完整代碼
評(píng)論