python中logging生成日誌模組的使用

2021-09-13 22:29:31 字數 3618 閱讀 8664

日誌一共分成5個等級,從低到高分別是:debug info warning error critical。

debug:詳細的資訊,通常只出現在診斷問題上

info:確認一切按預期執行

warning:乙個跡象表明,一些意想不到的事情發生了,或表明一些問題在不久的將來(例如。磁碟空間低」)。這個軟體還能按預期工作。

error:更嚴重的問題,軟體沒能執行一些功能

critical:乙個嚴重的錯誤,這表明程式本身可能無法繼續執行。

這5個等級,也分別對應5種打日誌的方法: debug 、info 、warning 、error 、critical。

預設的是warning,當在warning或之上時才被跟蹤。

有兩種方式記錄跟蹤,一種輸出控制台,另一種是記錄到檔案中,如日誌檔案。
用python的logging模組記錄日誌時,遇到了重覆記錄日誌的問題,第一條記錄寫一次,第二條記錄寫兩次,第三條記錄寫三次。。。這樣記日誌可不行。

原因:沒有移除handler

解決:在日誌記錄完之後removehandler

建立乙個日誌模組.py的檔案

import logging

logging.basicconfig(filename='log.log',

format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',

datefmt='%y-%m-%d %h:%m:%s %p',

level=10)

logging.debug('debug')

logging.info('info')

logging.warning('warning')

logging.error('error')

logging.critical('critical')

logging.log(10,'log')

執行:

從執行結果來看,建立了乙個log.log日誌檔案,時間是自動生產的,module是我們當前的python**檔名。

日誌等級:

critical = 50

fatal = critical

error = 40

warning = 30

warn = warning

info = 20

debug = 10

notset = 0

注:只有【當前寫等級】大於【日誌等級】時,日誌檔案才被記錄。

日誌記錄格式:

%(name)s      logger的名字

%(levelno)s 數字形式的日誌級別

%(levelname)s 文字形式的日誌級別

%(pathname)s 呼叫日誌輸出函式的模組的完整路徑名

%(filename)s 呼叫日誌輸出函式的模組的檔名

%(module)s 呼叫日誌輸出函式的模組名

%(funcname)s 呼叫日誌輸出函式的函式名

%(lineno)d 呼叫日誌輸出函式的語句所在的**行

%(created)f 當前時間,用unix標準的表示時間的浮 點數表示

%(relativecreated)d 輸出日誌資訊時的,自logger建立以 來的毫秒數

%(asctime)s 字串形式的當前時間。預設格式是 「2003-07-08 16:49:45,896」。逗號後面的是毫秒

%(thread)d 執行緒id。

%(threadname)s 執行緒名。

%(process)d 程序id。

%(message)s 使用者輸出的訊息

對於上述記錄日誌的功能,只能將日誌記錄在單檔案中,如果想要設定多個日誌檔案,logging.basicconfig將無法完成,需要自定義檔案和日誌操作物件。

import logging

# 定義檔案

file1 = logging.filehandler(filename='l1.log', mode='a', encoding='utf-8')

fmt = logging.formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s", datefmt='%y-%m-%d %h:%m:%s')

file1.setformatter(fmt)

file2 = logging.filehandler(filename='l2.log', mode='a', encoding='utf-8')

fmt = logging.formatter()

file2.setformatter(fmt)

# 定義日誌

logger1 = logging.logger(name='這裡是name', level=logging.error)

logger1.addhandler(file1)

logger1.addhandler(file2)

# logger1.removehandler(file1)

# logger1.removehandler(file2)

# 寫日誌

logger1.error(msg='這裡是msg111')

logger1.log(msg='這裡是msg222', level=50)

# 定義檔案

file3 = logging.filehandler(filename='l3.log', mode='a', encoding='utf-8')

fmt = logging.formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s", datefmt='%y-%m-%d %h:%m:%s')

file3.setformatter(fmt)

# 定義日誌

logger2 = logging.logger(name='這裡是name222222', level=logging.info)

logger2.addhandler(file3)

# 寫日誌

logger2.info('這裡是msg333333')

執行:

如上述建立的兩個日誌物件

Python中logging的使用

我們先來看一下函式式簡單配置 預設情況下python的logging模組將日誌列印到了標準輸出中,且只顯示了大於等於warning級別的日誌,這說明預設的日誌級別設定為warning 日誌級別等級critical error warning info debug 預設的日誌格式為日誌級別 logge...

python中的logging模組

一 python中的logging模組提供了日誌的介面,過它儲存各種格式的日誌 日誌的等級分為以下幾種,日誌的等級按照以下順序依次提高,debug info warning error critical 但是日誌的資訊量是依次減少的,當指定乙個日誌級別之後,會記錄大於或等於這個日誌級別的日誌資訊,小...

Python中logging例項講解

logging 的基本用法網上很多,這裡就不介紹了。在引入正文之前,先來看乙個需求 假設需要將某功能封裝成類庫供他人使用,如何處理類庫中的日誌?數年前在乙個 c 開發的專案中,我用程式設計客棧了這樣的方法 定義乙個 logging 基類,所有需要用到日誌的類都繼承這個基類,這個基類中定義乙個 log...