**
pythonlogging模組記錄日誌的整體框架如下圖所示:
如圖所示,整個日誌記錄的框架可以分為這麼幾個部分:
logger:即 logger main class,是我們進行日誌記錄時建立的物件,我們可以呼叫它的方法傳入日誌模板和資訊,來生成一條條日誌記錄,稱作 log record。
log record:就代指生成的一條條日誌記錄。
handler:即用來處理日誌記錄的類,它可以將 log record 輸出到我們指定的日誌位置和儲存形式等,如我們可以指定將日誌通過 ftp 協議記錄到遠端的伺服器上,handler 就會幫我們完成這些事情。
formatter:實際上生成的 log record 也是乙個個物件,那麼我們想要把它們儲存成一條條我們想要的日誌文字的話,就需要有乙個格式化的過程,那麼這個過程就由 formatter 來完成,返回的就是日誌字串,然後傳回給 handler 來處理。
filter:另外儲存日誌的時候我們可能不需要全部儲存,我們可能只需要儲存我們想要的部分就可以了,所以儲存前還需要進行一下過濾,留下我們想要的日誌,如只儲存某個級別的日誌,或只儲存包含某個關鍵字的日誌等,那麼這個過濾過程就交給 filter 來完成。
parent handler:handler 之間可以存在分層關係,以使得不同 handler 之間共享相同功能的**。
以上就是整個 logging 模組的基本架構和物件功能,了解了之後我們詳細來了解一下 logging 模組的用法。
**logging.getlog(模組名稱):宣告乙個log物件,引數為模組名稱,使用__name__就是模組的名稱,如果直接執行這個指令碼的話就是main,如果是 import 的模組的話就是被引入模組的名稱,這個變數在不同的模組中的名字是不同的,所以一般使用name來表示就好了
logging.basicconfig():log的基礎設定,其方法引數有如下
示例:
import os
import time
import logging
from filerootpath import rootpath
class
log:
def __init__
(self)
: rootpath =
rootpath()
.get_root_path()
+"\\log"#獲取.log檔案的根目錄
print
("rootpath:%s"
%rootpath)
self.logname = os.path.
join
(rootpath,
"%s.log"
%time.
strftime
('%y-%m-%d %h:%m:%s'))
self.logger = logging.
getlogger
(__name__)#定義乙個loging物件
self.logger.
setlevel
(logging.info) #設定logger等級為info
'''設定logging的格式:發生時間-檔名稱-檔案行數-方法-log等級-資訊'
'' self.formatter = logging.
formatter
('[%(asctime)s]-%(filename)s[line::%(lineno)d]-fuc:%(funcname)s-%(levelname)s:%(message)s'
) def file_haddle
(self):''
'日誌輸出到.log資料夾中'
'' file_haddle = logging.
filehandler
(self.logname,
'a') #以追加的方式將日誌寫到.log檔案中
file_haddle.
setlevel
(logging.info) #設定log等級
file_haddle.
setformatter
(self.formatter) #設定log格式模板
self.logger.
addfilter
(file_haddle)
'''日誌輸出到控制台'
'' # 建立乙個streamhandler,用於輸出到控制台
ch = logging.
streamhandler()
ch.setlevel
(logging.debug)
ch.setformatter
(self.formatter)
self.logger.
addhandler
(ch)
if level ==
'info'
: self.logger.
info
(message)
elif level ==
'debug'
: self.logger.
debug
(message)
elif level ==
'warning'
: self.logger.
warning
(message)
elif level ==
'error'
: self.logger.
error
(message)
# 這兩行**是為了避免日誌輸出重複問題
self.logger.
removehandler
(ch)
self.logger.
removehandler
(file_haddle)
file_haddle.
close()
def debug
(self,message)
: self.
__console
('debug'
,message)
def info
(self,message)
: self.
__console
('info'
,message)
def warning
(self,message)
: self.
__console
('warning'
,message)
def error
(self,message)
: self.
__console
('error'
,message)
if __name__ ==
'__main__'
: lg =
log(
) rp = lg.logname
print
(rp)
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或...