從零開始的Python學習Episode 14——日誌操作

微笑小狗發表於2018-10-27

日誌操作

 

一、logging模組

%(message)s 日誌資訊

%(levelno)s 日誌級別

datefmt 設定時間格式

filename 設定日誌儲存的路徑

level 設定日誌記錄的級別

filemode:檔案開啟方式,在指定了filename時使用這個引數,預設值為“a”還可指定為“w”,“a”表示在原有的日誌之後增添日誌,“w”表示清除原有的日誌後再新增新的日誌。

 

 

配置日誌級別、日誌格式、輸出位置

import logging

logging.basicConfig(level=logging.DEBUG,
                    format=`%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s`,
                    datefmt=`%a, %d %b %Y %H:%M:%S`,
                    filename=`example.log`,
                    filemode=`w`)

logging.debug(`debug message`)
logging.info(`info message`)
logging.warning(`warning message`)
logging.error(`error message`)
logging.critical(`critical message`)

在檔案example.log中檢視輸出:

Wed, 24 Oct 2018 19:04:25 test2.py[line:9] DEBUG debug message
Wed, 24 Oct 2018 19:04:25 test2.py[line:10] INFO info message
Wed, 24 Oct 2018 19:04:25 test2.py[line:11] WARNING warning message
Wed, 24 Oct 2018 19:04:25 test2.py[line:12] ERROR error message
Wed, 24 Oct 2018 19:04:25 test2.py[line:13] CRITICAL critical message

%(name)s Logger的名字

%(levelno)s 數字形式的日誌級別

%(levelname)s 文字形式的日誌級別

%(pathname)s 呼叫日誌輸出函式的模組的完整路徑名,可能沒有

%(filename)s 呼叫日誌輸出函式的模組的檔名

%(module)s 呼叫日誌輸出函式的模組名

%(funcName)s 呼叫日誌輸出函式的函式名

%(lineno)d 呼叫日誌輸出函式的語句所在的程式碼行

%(created)f 當前時間,用UNIX標準的表示時間的浮 點數表示

%(relativeCreated)d 輸出日誌資訊時的,自Logger建立以 來的毫秒數

%(asctime)s 字串形式的當前時間。預設格式是 “2003-07-08 16:49:45,896”。逗號後面的是毫秒

%(thread)d 執行緒ID。可能沒有

%(threadName)s 執行緒名。可能沒有

%(process)d 程式ID。可能沒有

%(message)s使用者輸出的訊息

 

 二、logger物件

Logger是一個樹形層級結構,輸出資訊之前都要獲得一個Logger(如果沒有顯示的獲取則自動建立

並使用root Logger,如第一個例子所示)。

logger = logging.getLogger()返回一個預設的Logger也即root Logger,並應用預設的日誌級別、

Handler和Formatter設定。

當然也可以通過Logger.setLevel(lel)指定最低的日誌級別,可用的日誌級別有logging.DEBUG、

logging.INFO、logging.WARNING、logging.ERROR、logging.CRITICAL。

import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

fh = logging.FileHandler(`example.log`,mode = `w`)
ch = logging.StreamHandler()
formatter = logging.Formatter(`%(asctime)s - %(name)s - %(levelname)s - %(message)s`)

fh.setFormatter(formatter)
ch.setFormatter(formatter)

logger.addHandler(fh)
logger.addHandler(ch)

logger.debug(`logger debug message`)
logger.info(`logger info message`)
logger.warning(`logger warning message`)
logger.error(`logger error message`)
logger.critical(`logger critical message`)

這裡的檔案模式在FileHandler裡面設定。

相關文章