學習筆記 python 日誌logging(一)

2021-08-20 08:41:23 字數 3300 閱讀 8955

logging 在原始碼中有三個檔案,結構如下:

├── config.py

├── handlers.py

└── __init__.py

_

int.py中實現了基礎功能,主要的邏輯就在這個檔案中

handlers.py 是一些handlers用起來很方便的.

config.py 是對配置做處理的方法.

1.呼叫關係【這張圖簡單明瞭,盜用了】

2.邏輯

logger = logging.getlogger(__name__)
也可以新增過濾器

logger.info('info')
處理器設定屬性:處理日誌層級,日誌格式器,過濾器,對應處理器選擇

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

file_handler = logging.handlers.rotatingfilehandler(filename='logs/jessproxy.log')

file_handler.setlevel(logging.info)

file_handler.setformatter(formater)

consle_handle = logging.streamhandler()

consle_handle.setlevel(logging.info)

consle_handle.setformatter(formater)

logger.addhandler(file_handler)

logger.addhandler(consle_handle)

多種過濾器能同時應用在記錄器和處理器

格式器負責將豐富的元資料日誌記錄轉換為字串,一般應用在處理器中

3.日誌工作流程圖

logging模組將日誌分為了五個等級:

五個等級的日誌資訊分別使用:logging模組的debug()、info()、warning()、error()、critical()方法來實現。

預設情況下,logging使用的日誌級別是warning,這表示只有在這個級別及其以上級別的日誌資訊才會被記錄,所以預設情況下debug資訊和info資訊都不會被顯示出來。

日誌記錄器(logger)是日誌處理的核心元件,包含了需要記錄日誌的地方、變化的字串、引數、請求的資訊佇列等資訊。

處理器handlers 將logger發過來的資訊進行準確地分配至其他終端。

在logging模組中,有很多種日誌處理器用於不同的用途,下面介紹幾個常用的:

其中我們最常使用的,還是filehandler處理器,將日誌訊息寫入檔案中。

此外,處理器的設定

預設的filter類,需要獲取乙個字串型別的引數,該引數是用來判斷日誌資訊是否允許被記錄。filter類中有乙個filter方法,該方法返回真則表示日誌資訊被記錄,否則將丟棄,不再處理。如果該引數為空字串,則filter方法返回真;否則,該字串引數表示著乙個logger(每個logger物件都有乙個用點分隔的字串名字),只有當前處理日誌資訊的logger物件是該字串引數指定的logger物件或子物件,filter方法才返回真,其它情況返回假。

log=logging.getlogger(」chat.gui.statistic」)

console = logging.streamhandler()

console.setlevel(logging.info)

formatter = logging.formatter(』%(asctime)s %(levelname)s %(message)s』)

console.setformatter(formatter)

filter=logging.filter(」chat.gui」)

console.addfilter(filter)

log.addhandler(console)

handler上新增了乙個過濾器。現在我們輸出日誌資訊的時候就會經過過濾器的處理。名為「a.b」的過濾器只讓名字帶有 「a.b」字首的logger輸出資訊。可以新增多個過濾器,只要有乙個過濾器拒絕,日誌資訊就不會被輸出。另外,在logger中也可以新增過濾器。

attribute

format

description

asctime

%(asctime)s

將日誌的時間構造成可讀的形式,預設情況下是『2016-02-08 12:00:00,123』精確到毫秒

filename

%(filename)s

包含path的檔名

funcname

%(funcname)s

由哪個function發出的log

levelname

%(levelname)s

日誌的最終等級(被filter修改後的)

message

%(message)s

日誌資訊

lineno

%(lineno)d

當前日誌的行號

pathname

%(pathname)s

完整路徑

process

%(process)s

當前程序

thread

%(thread)s

當前執行緒

Log日誌學習

log4j2 spring boot使用 一,引入依賴 org.springframework.boot spring boot starter web org.springframework.boot spring boot starter logging org.springframework....

Go標準庫學習筆記 日誌 log

log 模組用於在程式中輸出日誌,它的使用十分簡單,類似於fmt中的print,乙個最簡單的示例如下 package main import log func main 上面的程式會在命令列列印一條日誌 2018 05 16 16 48 06 hello worldlogger是寫入日誌的基本元件,...

Python 日誌記錄 log

usr bin python3.4 logger物件相當於是寫日誌的人 hand處理器相當於是寫日誌的規則 import logging import datetime def my log record my logger,my formatter fh logging.filehandler m...