寫入到日志文件
上面我們說的是將日志打印到控制臺中,但是我們Python代碼寫完并且在運行當中后,我們就不可能這樣玩了,所以我們需要將日志保存到一個日志文件中
完整代碼如下:
import coloredlogs
import logging
def func_name():
# 創建文件handler
file_handler = logging.FileHandler('log_file.log')
# 設置日志格式
formatter = logging.Formatter('%(asctime)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
# 安裝coloredlogs并設置級別
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)
# 移除默認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時,日志文件內實際保存的是未著色的原始文本。
如果想要文件中也保存顏色信息,可以考慮使用支持ANSI色彩的文件格式,比如HTML。然后通過logging模塊支持的HTML Formatter輸出彩色日志到HTML文件中,不過這種情況下就失去了純文本文件的可閱讀性。
綜上,coloredlogs只是在終端美化日志展示效果,文件輸出不保存顏色是正常情況。如果必須存儲顏色,可以輸出為HTML等格式,但復雜度會增加。
-
文件
+關注
關注
1文章
565瀏覽量
24727 -
日志
+關注
關注
0文章
138瀏覽量
10639 -
python
+關注
關注
56文章
4792瀏覽量
84628
發布評論請先 登錄
相關推薦
評論