Python 日誌輸出

2021-09-23 08:25:35 字數 4002 閱讀 7212

指令碼案例:

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資料夾下再建立乙個以當前日期命...