Appium-python日誌logging模組的簡介和應用(2)
Python的logging模組定義的函式和類為應用程式和庫的開發實現提供了一個靈活的事件日誌系統。
Logging模組提供了兩種記錄日誌的方式:
- 第一種是使用logging提供的模組級別的函式
- 第二種是使用logging日誌系統的四大元件
此文主要使用第一種方式。
一、Logging提供的模組級別的函式
函式 |
說明 |
logging.debug(msg, *args, **kwargs) |
建立一條嚴重級別為DEBUG的日誌記錄 |
logging.info(msg, *args, **kwargs) |
建立一條嚴重級別為INFO的日誌記錄 |
logging.warning(msg, *args, **kwargs) |
建立一條嚴重級別為WARNING的日誌記錄 |
logging.error(msg, *args, **kwargs) |
建立一條嚴重級別為ERROR的日誌記錄 |
logging.critical(msg, *args, **kwargs) |
建立一條嚴重級別為CRITICAL的日誌記錄 |
logging.log(level, *args, **kwargs) |
建立一條嚴重級別為level的日誌記錄 |
logging.basicConfig(**kwargs) |
對root logger進行一次性配置 |
其中logging.basicConfig(**kwargs)
函式用於指定“要記錄的日誌級別”、“日誌格式”、“日誌輸出位置”、“日誌檔案的開啟模式”等資訊,其他幾個都是用於記錄各個級別日誌的函式。
logging.basicConfig(**kwargs)詳細引數:
引數名稱 |
描述 |
filename |
指定日誌輸出目標檔案的檔名(可以寫檔名也可以寫檔案的完整的絕對路徑,寫檔名日誌放執行檔案目錄下,寫完整路徑按照完整路徑生成日誌檔案),指定該設定項後日志信心就不會被輸出到控制檯了 |
filemode |
指定日誌檔案的開啟模式,預設為'a'。需要注意的是,該選項要在filename指定時才有效 |
format |
指定日誌格式字串,即指定日誌輸出時所包含的欄位資訊以及它們的順序。logging模組定義的格式欄位下面會列出。 |
datefmt |
指定日期/時間格式。需要注意的是,該選項要在format中包含時間欄位%(asctime)s時才有效 |
level |
指定日誌器的日誌級別 |
stream |
指定日誌輸出目標stream,如sys.stdout、sys.stderr以及網路stream。需要說明的是,stream和filename不能同時提供,否則會引發 ValueError異常 |
style |
Python 3.2中新新增的配置項。指定format格式字串的風格,可取值為'%'、'{'和'$',預設為'%' |
handlers |
Python 3.3中新新增的配置項。該選項如果被指定,它應該是一個建立了多個Handler的可迭代物件,這些handler將會被新增到root logger。需要說明的是:filename、stream和handlers這三個配置項只能有一個存在,不能同時出現2個或3個,否則會引發ValueError異常。 |
其中format格式字串說明:
欄位/屬性名稱 |
使用格式 |
描述 |
asctime |
%(asctime)s |
將日誌的時間構造成可讀的形式,預設情況下是‘2016-02-08 12:00:00,123’精確到毫秒 |
name |
%(name)s |
所使用的日誌器名稱,預設是'root',因為預設使用的是 rootLogger |
filename |
%(filename)s |
呼叫日誌輸出函式的模組的檔名; pathname的檔名部分,包含檔案字尾 |
funcName |
%(funcName)s |
由哪個function發出的log, 呼叫日誌輸出函式的函式名 |
levelname |
%(levelname)s |
日誌的最終等級(被filter修改後的) |
message |
%(message)s |
日誌資訊, 日誌記錄的文字內容 |
lineno |
%(lineno)d |
當前日誌的行號, 呼叫日誌輸出函式的語句所在的程式碼行 |
levelno |
%(levelno)s |
該日誌記錄的數字形式的日誌級別(10, 20, 30, 40, 50) |
pathname |
%(pathname)s |
完整路徑 ,呼叫日誌輸出函式的模組的完整路徑名,可能沒有 |
process |
%(process)s |
當前程序, 程序ID。可能沒有 |
processName |
%(processName)s |
程序名稱,Python 3.1新增 |
thread |
%(thread)s |
當前執行緒, 執行緒ID。可能沒有 |
threadName |
%(thread)s |
執行緒名稱 |
module |
%(module)s |
呼叫日誌輸出函式的模組名, filename的名稱部分,不包含字尾即不包含檔案字尾的檔名 |
created |
%(created)f |
當前時間,用UNIX標準的表示時間的浮點數表示; 日誌事件發生的時間--時間戳,就是當時呼叫time.time()函式返回的值 |
relativeCreated |
%(relativeCreated)d |
輸出日誌資訊時的,自Logger建立以 來的毫秒數; 日誌事件發生的時間相對於logging模組載入時間的相對毫秒數 |
msecs |
%(msecs)d |
日誌事件發生事件的毫秒部分。logging.basicConfig()中用了引數datefmt,將會去掉asctime中產生的毫秒部分,可以用這個加上 |
常用的是%(asctime)s---時間、%(module)s—日誌所屬模組、%(lineno)d—日誌行號、%(message)s—日誌資訊
示例:
日誌輸出到指定的檔案,預設以追加的形式增加日誌;並格式化日誌的輸出格式: