python日誌模組

2021-09-10 03:58:19 字數 3412 閱讀 9474

logging.debug() # 10

logging.info() # 20

logging.warning() # 30

logging.error()# 40

logging.critical() # 50

預設級別為warning

預設輸出位置為控制台

import logging

logging.basicconfig()

可用引數:

filename:用指定的檔名建立filedhandler(後邊會具體講解handler的概念),這樣日誌會被儲存在指定的檔案中。

filemode:檔案開啟方式,在指定了filename時使用這個引數,預設值為「a」還可指定為「w」。

format:指定handler使用的日誌顯示格式。

datefmt:指定日期時間格式。

level:設定rootlogger(後邊會講解具體概念)的日誌級別

stream:用指定的stream建立streamhandler。可以指定輸出到sys.stderr,sys.stdout或者檔案,預設為sys.stderr。若同時列出了filename和stream兩個引數,則stream引數會被忽略。

可用格式:

%(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(

# filename="aaa.log",

filemode="at",

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

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

level=10

)

如何能夠同時輸出到多個位置?

1.logger 生成日誌

2.handler 處理日誌

3.filter 過濾日誌

4.formatter 格式化

1.由logger 產生日誌 -> 2.交給過濾器判斷是否被過濾 -> 3.將日誌訊息分發給繫結的所有處理器 -> 4處理器按照繫結的格式化物件輸出日誌

其中 第一步 會先檢查日誌級別 如果低於設定的級別則不執行

第二步 使用場景不多 需要使用物件導向的技術點 後續用到再講

第四部 如果不指定格式則按照預設格式

可以將乙個日誌指定為另乙個日誌的子日誌 或子孫日誌

當存在繼承關係時 子孫級日誌收到日誌時會講該日誌向上傳遞

指定繼承關係:

import  logging

​log1 = logging.getlogger("mother")

log2 = logging.getlogger("mother.son")

log3 = logging.getlogger("mother.son.grandson")

​# handler

fh = logging.filehandler(filename="cc.log",encoding="utf-8")

# formatter

fm = logging.formatter("%(asctime)s - %(name)s -%(filename)s - %(message)s")

​# 繫結

log1.addhandler(fh)

log2.addhandler(fh)

log3.addhandler(fh)

# 繫結格式

fh.setformatter(fm)

# 測試

# log1.error("測試")

# log2.error("測試")

log3.error("測試")

# 取消傳遞

log3.propagate = false

# 再次測試

log3.error("測試")

每次都要編寫**來配置非常麻煩 ,我們可以寫乙個完整的配置儲存起來,一遍後續直接使用

standard_format = '[%(asctime)s][%(threadname)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \

'[%(levelname)s][%(message)s]' #其中name為getlogger指定的名字

​******_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'

​id_******_format = '[%(levelname)s][%(asctime)s] %(message)s'

logfile_path = "dd.log"

​logging_dic = ,

'******': ,

},'filters': {},

'handlers': ,

#列印到檔案的日誌,收集info及以上的日誌

'default': ,

},'loggers': ,

},}

載入配置

import logging.config

logging.config.dictconfig(logging_dic)

logging.getlogger("aa").debug("測試")

# getlogger引數就是對應字典中loggers的key 如果沒有匹配的key 什麼都不做 很多情況我們的日誌可能對應不同的業務模組 我們需要在日誌中提現業務資訊 那問題是 我的配置中不可能預先知道所有的業務名稱 這時候我們可以將key設定為空 這樣一樣來 獲取的時候如果找不到對應的就是用預設的 並且日誌物件的名稱會變成你傳入的key

python 日誌模組

在軟體或者系統發生錯誤時可以通過日誌快速定位到錯誤,從而定位問題,解決問題。logging模組提供的日誌記錄函式所使用的日誌器設定的日誌級別是warning,因此只有warning級別的日誌記錄以及大於它的error和critical級別的日誌記錄被輸出了,而小於它的debug和info級別的日誌記...

python日誌模組

python的日誌模組使用logging,如果想要輸出符合自己的預期,需要重新定義,廢話不多說,直接貼 encoding utf 8 from logging.handlers import timedrotatingfilehandler import logging import osimpor...

python 日誌模組

import logging logging.basicconfig level logging.debug,format asctime s filename s line lineno d levelname s message s datefmt a,d b y h m s filename ...