記錄下python中使用logging實現日誌輸出到檔案,例項如下:
# -*- coding: utf-8 -*-
#!/usr/bin/python
import logging
from logging import handlers
# 建立乙個logger並設定日誌等級
logger = logging.getlogger()
logger.setlevel(logging.info)
# 定義日誌檔案
logfile = './sdkup.log'
# 建立乙個filehandler,並將日誌寫入指定的日誌檔案中
filehandler = logging.filehandler(logfile, mode='a')
filehandler.setlevel(logging.info)
# 或者建立乙個streamhandler,將日誌輸出到控制台
streamhandler = logging.streamhandler()
streamhandler.setlevel(logging.info)
# 定義handler的日誌輸出格式
formatter = logging.formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
filehandler.setformatter(formatter)
# 定義日誌滾動條件,這裡按日期-天保留日誌
timedrotatingfilehandler = handlers.timedrotatingfilehandler(filename=logfile, when='d')
timedrotatingfilehandler.setlevel(logging.info)
timedrotatingfilehandler.setformatter(formatter)
# 新增handler
logger.addhandler(filehandler)
logger.addhandler(streamhandler)
logger.addhandler(timedrotatingfilehandler)
if __name__ == '__main__':
logger.debug('debug')
logger.info('info')
logger.critical('critical')
其中formatter是給handler設定的,因為handler是負責把日誌輸出到**,所以是給它設定格式,而不是給logger;
那為什麼level需要設定兩次呢?
給logger設定是告訴它要記錄哪些級別的日誌,給handler設是告訴它要輸出哪些級別的日誌,相當於進行兩次過濾。
這樣的好處在於,當有多個日誌去向時,比如既儲存到檔案,又輸出到控制台,就可以分別給它們設定不同的級別;
logger 的級別是先過濾的,所以被 logger 過濾的日誌 handler 也是無法記錄的,這樣就可以只改 logger 的級別而影響所有輸出。
兩者結合可以更方便地管理日誌記錄的級別。
而formatter可以指定輸出的內容和格式,其內建的引數如下:
%(name)s:logger的名字
%(levelno)s:列印日誌級別的數值
%(levelname)s:列印日誌級別的名稱
%(pathname)s:列印當前執行程式的路徑,其實就是sys.ar**[0]
%(filename)s:列印當前執行程式名
%(funcname)s:列印日誌的當前函式
%(lineno)d:列印日誌的當前行號
%(asctime)s:列印日誌的時間
%(thread)d:列印執行緒id
%(threadname)s:列印執行緒名稱
%(process)d:列印程序id
%(message)s:列印日誌資訊
另外python在自動分割日誌檔案方面提供了兩個處理器,如下:
handlers.rotatingfilehandler -> 按照大小自動分割日誌檔案,一旦達到指定的大小重新生成檔案
handlers.timedrotatingfilehandler -> 按照時間自動分割日誌檔案
更多例項參照敬請右轉學習:
python logging 最佳實踐
建立乙個logger,這裡的級別debug是總開關,控制了下面file 和console handler的級別 logger logging.getlogger logger.setlevel logging.debug 建立乙個handler,用於寫入日誌檔案,並定義輸出格式 fh logging...
Python logging模組學習
import logging 日誌級別列表,預設為logging.warning levels logging.notset,logging.debug,logging.info,logging.warning,logging.error,logging.critical log format as...
python logging模組簡介
logging模組是python內建的標準模組,主要用於輸出執行日誌,可以設定輸出日誌的等級 日誌儲存路徑 日誌檔案回滾等。相對於print,該模組具有可以決定在列印什麼級別的資訊和將資訊輸出放置在什麼地方的優點。配置logging的基本設定,並在控制台輸出 import logging loggi...