Python 模組之logging日誌

2021-08-23 14:34:21 字數 4294 閱讀 3847

logging模組是pyhton自帶的內建模組,提供了標準的日誌介面

日誌等級列表

日誌等級(level)

描述級別

notset

不設定0

debug

最詳細的日誌資訊,典型應用場景是 問題診斷

10info

資訊詳細程度僅次於debug,通常只記錄關鍵節點資訊,用於確認一切都是按照我們預期的那樣進行工作

20warning

當某些不期望的事情發生時記錄的資訊(如,磁碟可用空間較低),但是此時應用程式還是正常執行的

30error

由於乙個更嚴重的問題導致某些功能不能正常執行時記錄的資訊

40critical

當發生嚴重錯誤,導致應用程式不能繼續執行時記錄的資訊

50

logger:產生日誌的物件

filter:過濾日誌的物件

handler:接收日誌然後控制列印到不同的地方,filehandler用來列印到檔案中,streamhandler用來列印到終端

formatter:可以定製不同的日誌格式物件,然後繫結給不同的handler物件使用,以此來控制不同的handler的日誌格式

幾種物件的使用方式**示例:

'''

critical=50

error =40

warning =30

info = 20

debug =10

'''import logging

#1、logger物件:負責產生日誌,然後交給filter過濾,然後交給不同的handler輸出

logger=logging.getlogger(__file__)

#2、filter物件:不常用,略

#3、handler物件:接收logger傳來的日誌,然後控制輸出

h1=logging.filehandler('t1.log') #列印到檔案

h2=logging.filehandler('t2.log') #列印到檔案

h3=logging.streamhandler() #列印到終端

#4、formatter物件:日誌格式

formmater1=logging.formatter('%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',

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

formmater2=logging.formatter('%(asctime)s : %(message)s',

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

formmater3=logging.formatter('%(name)s %(message)s',)

#5、為handler物件繫結格式

h1.setformatter(formmater1)

h2.setformatter(formmater2)

h3.setformatter(formmater3)

#6、將handler新增給logger並設定日誌級別

logger.addhandler(h1)

logger.addhandler(h2)

logger.addhandler(h3)

logger.setlevel(10)

#7、測試

logger.debug('debug')

logger.info('info')

logger.warning('warning')

logger.error('error')

logger.critical('critical')

注意:日誌會由logger先過濾一次再到handler物件,當handler物件和logger物件同時設定了日誌級別時,最終的日誌級別會按照兩者中最高的級別設定

可在logging.basicconfig()函式中可通過具體引數來更改logging模組預設行為,可用引數有

filename:用指定的檔名建立filedhandler,這樣日誌會被儲存在指定的檔案中

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

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

datefmt:指定日期時間格式

level:設定rootlogger的日誌級別

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

format引數中可能用到的格式化串:

附乙個可直接用的日誌模板

"""

logging配置

"""import os

import logging.config

# 定義三種日誌輸出格式 開始

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_dir = os.path.dirname(os.path.abspath(__file__)) # log檔案的目錄

logfile_name = 'all2.log' # log檔名

# 如果不存在定義的日誌目錄就建立乙個

if not os.path.isdir(logfile_dir):

os.mkdir(logfile_dir)

# log檔案的全路徑

logfile_path = os.path.join(logfile_dir, logfile_name)

# log配置字典

logging_dic = ,

'******': ,

},'filters': {},

'handlers': ,

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

'default': ,

},'loggers': ,

},}def load_my_logging_cfg(event_log):

logging.config.dictconfig(logging_dic) # 匯入上面定義的logging配置

# logger = logging.getlogger(__name__) # 生成乙個log例項

# logger.info(event_log) # 記錄事件的日誌

測試:

"""

mylogging test

"""import time

import logging

import my_logging # 匯入自定義的logging配置

logger = logging.getlogger(__name__) # 生成logger例項

def demo():

logger.debug("start range... time:{}".format(time.time()))

logger.info("中文測試開始。。。")

for i in range(10):

logger.debug("i:{}".format(i))

time.sleep(0.2)

else:

logger.debug("over range... time:{}".format(time.time()))

logger.info("中文測試結束。。。")

if __name__ == "__main__":

my_logging.load_my_logging_cfg() # 在你程式檔案的入口載入自定義logging配置

demo()

configparser模組,logging模組

configparser模組 import configparser ret configparser.configparser ret a ret b ret c with open file w as f ret.write f 自動生成檔案 a 1 2 3 4 b 5 6 c 7 8 按照字典...

詳解Python中的日誌模組logging

許多應用程式中都會有日誌模組,用於記錄系統在執行過程中的一些關鍵資訊,以便於對系統的執行狀況進行跟蹤。在.net平台中,有非常著名的第三方開源日誌元件log4net,c 中,有人們熟悉的log4cpp,而在python中,我們不需要第三方的日誌元件,因為它已經為我們提供了簡單易用 且功能強大的日誌模...

day21 shutil模組和logging模組

一 shutil模組 copy2函式 複製檔案 copytree 拷貝整個目錄 rmtree 刪除整個目錄 move 移動檔案 eg shutil.copy d test testfile.txt d test testfilebak.txt 複製乙份檔案 shutil.move d test te...