1. 程式人生 > 其它 >Python輸出日誌資訊

Python輸出日誌資訊

在Python中要輸出日誌資訊有2種方式:
1.呼叫內建的print()方法,該方式只能將資訊輸出到控制檯
2.使用logging模組將日誌資訊輸出到檔案中(logging模組預設也是輸出到控制檯:標準錯誤輸出流)

輸出到控制檯

使用print()方法:

print('日誌資訊')

使用logging模組的預設配置(日誌級別為WARNING,輸出到標準錯誤輸出流):

import logging
# 當沒有明確配置輸出到檔案時,資訊將會被輸出到標準錯誤輸出流中
logging.debug('debug資訊')
logging.info('info資訊')
# logging模組的預設日誌級別為WARNING,所以只會輸出大於等於WARNING級別日誌日誌
# logging模組的日誌級別等級:DEBUG(10) < INFO(20) < WARNING(30) < ERROR(40) < FATAL或CRITICAL(50)
logging.warning('warning資訊')
logging.error('error資訊')
logging.critical('critical資訊')

使用logging模組明確配置輸出到控制檯(標準輸出流):

log = logging.getLogger('Console')
log.setLevel(logging.INFO)
fmt = logging.Formatter('%(asctime)s %(thread)d %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
console_handler = logging.StreamHandler(sys.stdout) # 明確指定日誌輸出到標準輸出流中
console_handler.setFormatter(fmt)
log.addHandler(console_handler)
log.info(msg)

輸出到檔案

在專案中更為普遍的使用方式是將日誌資訊輸出到檔案中,當然同時也可以輸出到控制檯便於除錯時檢視。

首先封裝一個實現日誌輸出的模組(logger.py):

# -*- coding: utf-8 -*-

import sys
import logging
from logging import handlers

# 日誌級別關係對映
level_relations = {
    'debug': logging.DEBUG,
    'info': logging.INFO,
    'warning': logging.WARNING,
    'error': logging.ERROR,
    'crit': logging.CRITICAL
}

def _get_logger(filename, level='info'):
    # 建立日誌物件
    log = logging.getLogger(filename)
    # 設定日誌級別
    log.setLevel(level_relations.get(level))
    # 日誌輸出格式
    fmt = logging.Formatter('%(asctime)s %(thread)d %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
    # 輸出到控制檯
    console_handler = logging.StreamHandler(sys.stdout)
    console_handler.setFormatter(fmt)
    # 輸出到檔案
    # 日誌檔案按天進行儲存,每天一個日誌檔案
    file_handler = handlers.TimedRotatingFileHandler(filename=filename, when='D', backupCount=1, encoding='utf-8')
    # 按照大小自動分割日誌檔案,一旦達到指定的大小重新生成檔案
    # file_handler = handlers.RotatingFileHandler(filename=filename, maxBytes=1*1024*1024*1024, backupCount=1, encoding='utf-8')
    file_handler.setFormatter(fmt)

    log.addHandler(console_handler)
    log.addHandler(file_handler)
    return log

# 明確指定日誌輸出的檔案路徑和日誌級別
logger = _get_logger('../logs/test.log', 'info')

其次,在要進行日誌輸出的地方引入logger模組中的logger物件即可:

from logger import logger

if __name__ == '__main__':
    logger.info('日誌輸出測試')

關於logging模組的介紹詳見:logging --- Python 的日誌記錄工具

【參考】
https://www.cnblogs.com/nancyzhu/p/8551506.html Python + logging 輸出到螢幕,將log日誌寫入檔案