logging.debug() # 10預設級別為warninglogging.info() # 20
logging.warning() # 30
logging.error()# 40
logging.critical() # 50
預設輸出位置為控制台
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.configlogging.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 ...