目錄
1. logging模塊
logging模塊是Python內置的標準模塊,主要用於輸出運行日誌,可以設置輸出日誌的等級、日誌保存路徑、日誌文件回滾等;相比print,具備如下優點:
- 可以通過設置不同的日誌等級,在release版本中只輸出重要信息,而不必顯示大量的調試信息;
- print將所有信息都輸出到標準輸出中,嚴重影響開發者從標準輸出中查看其它數據;logging則可以由開發者決定將信息輸出到什麼地方,以及怎麼輸出;
1.1 日誌級別
python的logging模塊提供了標準的日誌接口,你可以通過它存儲各種格式的日誌,logging的日誌可以爲 debug(), info(), warning(), error()和critical() 5個級別。
日誌級別(由低到高) |
|
DEBUG |
|
INFO |
|
WARNING |
|
ERROR |
|
CRITICAL |
|
1.2 logging.basicConfig()函數
logging.basicConfig()函數爲日誌系統建立一個默認的流處理器(StreamHandler),設置基礎配置(如日誌級別等)並加到root logger(根Logger)中。
可通過具體參數來更改logging模塊默認行爲,可用參數有
- filename:用指定的文件名創建FileHandler,這樣日誌會被存儲在指定的文件中
- filemode:文件打開方式,在指定了filename時使用這個參數,默認爲“a”,還可指定爲“w”
- format:指定handler使用的日誌顯示格式
- datefmt:指定日期時間格式
- level:設置rootlogger的日誌級別
- stream:用指定的stream創建StreamHandler。可以指定輸出到sys.stderr,sys.stdout或者文件,默認爲sys.stderr。若同時列出了filename和stream兩個參數,則stream參數會被忽略
format參數中可能用到的格式化字符串
format格式 |
描述 |
%(name)s |
Logger的名字 |
%(levelno)s |
數字形式的日誌級別 |
%(levelname)s |
文本形式的日誌級別 |
%(pathname)s |
調用日誌輸出函數的模塊的完整路徑名,可能沒有 |
%(filename)s |
調用日誌輸出函數的模塊的文件名 |
%(module)s |
調用日誌輸出函數的模塊名 |
%(funcName)s |
調用日誌輸出函數的函數名 |
%(lineno)d |
調用日誌輸出函數的語句所在的代碼行 |
%(create)f |
當前時間,用Unix標準的表示時間的表示(浮點數) |
%(relativeCreated)d |
輸出日誌信息時的,自Logger創建以來的毫秒數 |
%(asctime)s |
字符串形式的當前時間。 默認格式是 “2003-07-08 16:49:45,896”。逗號後面的是毫秒 |
%(thread)d |
線程ID。可能沒有 |
%(threadName)s |
線程名。可能沒有 |
%(process)d |
進程ID。可能沒有 |
%(message)s |
用戶輸出的消息 |
1.3 實例
import logging
logging.basicConfig(level = logging.DEBUG,
format = '%(asctime)s\t%(filename)s\t[line:%(lineno)d]\t%(levelname)s\t%(message)s',
datefmt = '%a, %d-%b-%Y %H:%M:%S',
filename = '/var/log/test.log',
filemode='a+')
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
運行上述代碼後,輸入cat /var/log/test.log進行查看
3. logging.getLogger()函數
logging.getLogger()函數返回一個Logger對象,如果沒有指定名字將返回root logger
import logging
#創建一個logger對象
logger = logging.getLogger()
#創建一個handler,用於寫入日誌文件
fh = logging.FileHandler('/var/log/test.log')
#再創建一個handler,用於輸出到控制檯
ch = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(message)s')
#增加formatter輸出格式到屏幕輸出對象和文件輸出對象
fh.setFormatter(formatter)
ch.setFormatter(formatter)
#將屏幕輸出對象和文件輸出對象添加到Logger
logger.addHandler(fh)
logger.addHandler(ch)
logger.setLevel(logging.DEBUG)
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')
輸入cat /var/log/test1.py查看日誌文件(以和上述日誌分開)