python logging 模組學習

2021-09-26 09:21:10 字數 3991 閱讀 1603

以下是部分學習記錄:

## 1、基礎使用

import logging

logging.basicconfig(format='%(asctime)s : %(levelname)s : %(pathname)s : %(lineno)s : %(message)s',

level=logging.info, filename='log.txt')

logging.error('222222222222') # exc_info=true 可以輸出完整的儲存資訊,適用於捕獲錯誤

format:指定日誌資訊的輸出格式,即上文示例所示的引數,詳細引數可以參考:docs.python.org/3/library/l…,部分引數如下所示:

## 2、handler

# handler使用

# streamhandler 控制台輸出

stream_handler = logging.streamhandler(sys.stdout)

stream_handler.setlevel(level=logging.debug)

logger.addhandler(stream_handler)

# filehandler 檔案輸出

file_handler = logging.filehandler('output.log')

file_handler.setlevel(level=logging.info)

formatter = logging.formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

file_handler.setformatter(formatter)

logger.addhandler(file_handler)

# httphandler 通過」get」或者」post」遠端輸出到http伺服器。

# 這樣一來,我們就通過設定多個 handler 來控制了日誌的多目標輸出。

# 還可以通過formatter給每個 handler 單獨配置輸出的格式,非常靈活。

# logging 模組提供的 handler 有

"""streamhandler:logging.streamhandler;日誌輸出到流,可以是 sys.stderr,sys.stdout 或者檔案。

filehandler:logging.filehandler;日誌輸出到檔案。

baserotatinghandler:logging.handlers.baserotatinghandler;基本的日誌回滾方式。

rotatinghandler:logging.handlers.rotatinghandler;日誌回滾方式,支援日誌檔案最大數量和日誌檔案回滾。

timerotatinghandler:logging.handlers.timerotatinghandler;日誌回滾方式,在一定時間區域內回滾日誌檔案。

sockethandler:logging.handlers.sockethandler;遠端輸出日誌到tcp/ip sockets。

datagramhandler:logging.handlers.datagramhandler;遠端輸出日誌到udp sockets。

sysloghandler:logging.handlers.sysloghandler;日誌輸出到syslog。

nteventloghandler:logging.handlers.nteventloghandler;遠端輸出日誌到windows nt/2000/xp的事件日誌。

memoryhandler:logging.handlers.memoryhandler;日誌輸出到記憶體中的指定buffer。

httphandler:logging.handlers.httphandler;通過」get」或者」post」遠端輸出到http伺服器。

"""

## 3、配置共享
在寫專案的時候,我們肯定會將許多配置放置在許多模組下面,這時如果我們每個檔案都來配置 logging 配置那就太繁瑣了,logging 模組提供了父子模組共享配置的機制,會根據 logger 的名稱來自動載入父模組的配置。

例如我們這裡首先定義乙個 main.py 檔案:

import logging

import core

logger = logging.getlogger('main')

logger.setlevel(level=logging.debug)

# handler

handler = logging.filehandler('result.log')

handler.setlevel(logging.info)

formatter = logging.formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

handler.setformatter(formatter)

logger.addhandler(handler)

logger.info('main info')

logger.debug('main debug')

logger.error('main error')

core.run()

這裡我們配置了日誌的輸出格式和檔案路徑,同時定義了 logger 的名稱為 main,然後引入了另外乙個模組 core,最後呼叫了 core 的 run() 方法。

接下來我們定義 core.py,內容如下:

import logging

logger = logging.getlogger('main.core')

def run():

logger.info('core info')

logger.debug('core debug')

logger.error('core error')

這裡我們定義了 logger 的名稱為 main.core,注意這裡開頭是 main,即剛才我們在 main.py 裡面的 logger 的名稱,這樣 core.py 裡面的 logger 就會復用 main.py 裡面的 logger 配置,而不用再去配置一次了。

執行之後會生成乙個 result.log 檔案,內容如下:

2018-06-03 16:55:56,259 - main - info - main info

2018-06-03 16:55:56,259 - main - error - main error

2018-06-03 16:55:56,259 - main.core - info - core info

2018-06-03 16:55:56,259 - main.core - error - core error

可以看到父子模組都使用了同樣的輸出配置。

如此一來,我們只要在入口檔案裡面定義好 logging 模組的輸出配置,子模組只需要在定義 logger 物件時名稱使用父模組的名稱開頭即可共享配置,非常方便。

Python logging模組學習

import logging 日誌級別列表,預設為logging.warning levels logging.notset,logging.debug,logging.info,logging.warning,logging.error,logging.critical log format as...

python logging模組簡介

logging模組是python內建的標準模組,主要用於輸出執行日誌,可以設定輸出日誌的等級 日誌儲存路徑 日誌檔案回滾等。相對於print,該模組具有可以決定在列印什麼級別的資訊和將資訊輸出放置在什麼地方的優點。配置logging的基本設定,並在控制台輸出 import logging loggi...

Python logging日誌模組

1.日誌的級別 日誌一共分成5個等級,從低到高分別是 1 debug 2.info 3.warning 4.error 5.critical說明 這5個等級,也分別對應5種打日誌的方法 debug info warning error critical。預設的是 warning,當在warning或...