寫(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文章
566瀏覽量
24757 -
日志
+關(guān)注
關(guān)注
0文章
138瀏覽量
10650 -
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84727
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論