指令碼案例:
import logging
logging =logging.getlogger()
logger.setlevel(logging.info)
consolehandler =logging.streamhandler()
logger.addhandler(consolehandler)
logger.info("aa")
logger.error("error")
日誌級別有如下幾種。當獲取根logger的時候,預設級別為notset,這樣會顯示所有輸出。當獲取非根logger的時候,根logger的預設級別是warning,非根logger會繼承這個級別,只有warning以上的日誌才會輸出。
級別數值
critical
error
warning
info
debug
notset
日誌物件通過模組的getlogger(name)
函式獲得,可以向該函式傳遞乙個名稱。如果不傳遞名字的話,就會獲取根logger。
日誌物件常用方法如下。
方法名作用
setlevel(lvl)
設定日誌級別
isenabledfor(lvl)
檢查某級別的日誌是否啟用
geteffectivelevel()
獲取實際的日誌級別
debug/warning/info/error(msg, *args, **kwargs)
輸出對應級別的日誌
log(lvl, msg, *args, **kwargs)
輸出指定級別的日誌
addfilter(filt)/removefilter(filt)
新增或刪除指定的過濾器
addhandler(hdlr)/removehandler(hdlr)
新增或刪除指定的處理器
日誌物件用於輸出日誌,而handler物件用於指定日誌向**輸出(檔案、終端等等)。handler列表可以參考handler型別。
常用的handler有以下幾種:
過濾器物件用於過濾日誌的輸出。
logrecord物件基本上和我們沒多大關係,簡單地說,我們輸出的每一條日誌,就是乙個logrecord物件。它有日誌系統自動建立和使用。如果我們留心一下日誌模組的方法,會發現有很多地方都要接受logrecord引數。logrecord有很多屬性資訊,對日誌列印有幫助,可以參考16.6.6. logrecord objects下面的屬性和格式化符的對照表。例如%(asctime)s
會生**類可讀的時間戳,%(lineno)d
返回當前行號等等。
日誌模組還包含了一些模組級別的函式。簡單不完整列舉如下:
函式名作用
getlogger(name=none)
獲取對應名稱的logger,如果不指定名稱會返回根logger
debug/info等函式
在根logger上列印對應級別的日誌資訊
disable(lvl)
禁用某級別的日誌列印
basicconfig(關鍵字引數)
這個函式可以快速設定日誌的級別、格式、handler、formatter等
前面都是紙面上的介紹,下面來真正使用日誌模組來列印日誌。下面的**所用知識,前面都已介紹過。執行**之後,可以驗證日誌同時在終端輸出和檔案中輸出。
import logging
# 建立logger
logger = logging.getlogger()
logger.setlevel(logging.debug)
# 建立handler
# 終端handler
consolehandler = logging.streamhandler()
consolehandler.setlevel(logging.debug)
# 檔案handler
filehandler = logging.filehandler('log.log', mode='w', encoding='utf-8')
filehandler.setlevel(logging.notset)
# formatter
formatter = logging.formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
consolehandler.setformatter(formatter)
filehandler.setformatter(formatter)
# 新增到logger中
logger.addhandler(consolehandler)
logger.addhandler(filehandler)
# 列印日誌
logger.debug('debug 資訊')
logger.info('info 資訊')
logger.warning('warn 資訊')
logger.error('error 資訊')
logger.critical('critical 資訊')
logger.debug('%s 是自定義資訊' % '這些東西')
執行結果。
2017-04-04 21:45:16,742 - root - debug - debug 資訊
2017-04-04 21:45:16,742 - root - info - info 資訊
2017-04-04 21:45:16,742 - root - warning - warn 資訊
2017-04-04 21:45:16,742 - root - error - error 資訊
2017-04-04 21:45:16,742 - root - critical - critical 資訊
2017-04-04 21:45:16,742 - root - debug - 這些東西 是自定義資訊
前面都是在**中配置日誌的輸出,我們還可以將配置寫到配置檔案中,然後傳遞給日誌模組。舊式程式會使用conf
格式配置檔案,不過這種配置檔案比較傳統,所以就不介紹了。
自python 3.2起,引入了一種新的基於鍵值對的配置方式。這種新方式的優點是配置檔案非常靈活,我們可以使用xml、yaml、json等格式儲存配置,也可以從網路上接收序列化的python物件當做配置物件。總之,想怎麼來就怎麼來。我們下面就介紹這種新方式。
具體的鍵值對需要參考官方文件。例如下面就是python官方給出的乙個yaml格式的配置檔案。
version: 1
formatters:
******:
format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
handlers:
console:
class: logging.streamhandler
level: debug
formatter: ******
stream: ext:
loggers:
main:
level: debug
handlers: [console]
propagate: no
root:
level: debug
handlers: [console]
然後引入logging.config
模組,並將配置檔案傳遞給logging.config
模組的dictconfig
方法。這樣就做好了日誌列印的準備工作了。
import logging.config
logging.config.dictconfig('config.yaml')
logger = logging.getlogger('****')
python日誌輸出
import logging logger logging.getlogger 生成乙個日誌物件,內為日誌物件的名字,可以不帶,名字不給定就是root,一般給定名字,否則會把其他的日誌輸出也會列印到你的檔案裡。handler logging.filehandler log test.txt 生成乙個...
Python 日誌輸出
列印日誌是很多程式的重要需求,良好的日誌輸出可以幫我們更方便的檢測程式執行狀態。python標準庫提供了logging模組,讓我們也可以方便的在python中列印日誌。完整的使用方法可以參考標準庫文件。這裡做一下簡單介紹。日誌級別有如下幾種。當獲取根logger的時候,預設級別為notset,這樣會...
python 輸出日誌
專案路徑 prj path os.path.dirname os.path.abspath file 當前檔案的上一級的上一級目錄 增加一級 在專案路徑下建立乙個log資料夾,拼接成路徑格式 log path os.path.join prj path,log 在log資料夾下再建立乙個以當前日期命...