寫入到日志文件
上面我們說的是將日志打印到控制臺中,但是我們Python代碼寫完并且在運行當(dāng)中后,我們就不可能這樣玩了,所以我們需要將日志保存到一個日志文件中
完整代碼如下:
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è)置級別
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())
# 測試輸出日志
logger.debug('debug message')
logger.info('info message')
logger.error('error message')
logger.warning('warning message')
func_name()
打開我們log_file.log文件后,就可以看到我們生成的日志信息
可以看到我們生成的日志文件中不同級別的日志還是使用的是一樣的顏色。那這是為什么呢?
其實coloredlogs 庫只是在終端輸出時給日志添加了顏色,但寫入文件時colors并不能保留。
這是因為終端輸出和文件輸出使用的是不同的handler:
- 終端輸出使用的是StreamHandler,可以 interpreter 處理ANSI色彩編碼顯示顏色。
- 文件輸出使用的是FileHandler,寫入的僅是純文本,無法保存ANSI編碼的顏色信息。
ANSI色彩編碼只有在支持其的終端才能渲染為顏色,一旦寫入文件就會失去這些編碼信息。所以使用coloredlogs時,日志文件內(nèi)實際保存的是未著色的原始文本。
如果想要文件中也保存顏色信息,可以考慮使用支持ANSI色彩的文件格式,比如HTML。然后通過logging模塊支持的HTML Formatter輸出彩色日志到HTML文件中,不過這種情況下就失去了純文本文件的可閱讀性。
綜上,coloredlogs只是在終端美化日志展示效果,文件輸出不保存顏色是正常情況。如果必須存儲顏色,可以輸出為HTML等格式,但復(fù)雜度會增加。
-
文件
+關(guān)注
關(guān)注
1文章
577瀏覽量
25149 -
日志
+關(guān)注
關(guān)注
0文章
141瀏覽量
10798 -
python
+關(guān)注
關(guān)注
56文章
4822瀏覽量
85948
發(fā)布評論請先 登錄
基于RV1126開發(fā)板限制系統(tǒng)日志大小教程

python入門圣經(jīng)-高清電子書(建議下載)
創(chuàng)建了用于OpenVINO?推理的自定義C++和Python代碼,從C++代碼中獲得的結(jié)果與Python代碼不同是為什么?
如何將python文件導(dǎo)入到ROS系統(tǒng)中

Linux實時查看日志的四種命令詳解

Wine開發(fā)系列——如何使用Wine日志調(diào)試問題
hex文件如何查看原c語言代碼
linux日志管理之journalctl命令

PDF文件批量打印源代碼
日志框架簡介-Slf4j+Logback入門實踐

如何實現(xiàn)Python復(fù)制文件操作
奇怪!應(yīng)用的日志呢??

評論