python中logging模塊用法

原文鏈接:https://blog.csdn.net/liuchunming033/article/details/39080457

1,日誌級別

日誌一共分成5個等級,從低到高分別是:DEBUG、INFO、WARNING、ERROR、CRITICAL。

  • DEBUG:詳細的信息,通常只出現在診斷問題上
  • INFO:確認一切按預期運行
  • WARNING:一個跡象表明,一些意想不到的事情發生了,或表明一些問題在不久的將來(例如。磁盤空間低”)。這個軟件還能按預期工作。
  • ERROR:更嚴重的問題,軟件沒能執行一些功能
  • CRITICAL:一個嚴重的錯誤,這表明程序本身可能無法繼續運行

這5個等級,也分別對應5種打日誌的方法: debug 、info 、warning 、error 、critical。默認的是WARNING,當在WARNING或之上時才被跟蹤。

2,日誌輸出

有兩種方式記錄跟蹤,一種輸出控制檯,另一種是記錄到文件中,如日誌文件。
【注意事項】
logging.basicConfig是全局的設置,當py文件中已經有模塊對logging.basicConfig進行過設置,那麼該py文件的basicConfig設置可能就不起作用了。所以,建議大家不要使用logging.basicConfig,而使用自定義的logger,因爲有時候即使你設置了logging.basicConfig,它還是會失效,更痛苦的是你還找不到失效的原因。

2.1 將日誌輸出到控制檯——logging.basicConfig

比如,編寫一個叫做log.py的文件,如下:

import logging
 
logging.basicConfig(level=logging.WARNING,
                    format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
# use logging
logging.info('this is a loggging info message')
logging.debug('this is a loggging debug message')
logging.warning('this is loggging a warning message')
logging.error('this is an loggging error message')
logging.critical('this is a loggging critical message')

執行上面的代碼將在Console中輸出下面信息:

2015-05-21 17:25:22,572 - log.py[line:10] - WARNING: this is loggging a warning message
2015-05-21 17:25:22,572 - log.py[line:11] - ERROR: this is an loggging error message
2015-05-21 17:25:22,572 - log.py[line:12] - CRITICAL: this is a loggging critical message

【解析】
通過logging.basicConfig函數對日誌的輸出格式及方式做相關配置,上面代碼設置日誌的輸出等級是WARNING級別,意思是WARNING級別以上的日誌纔會輸出。另外還制定了日誌輸出的格式。

2.2 將日誌輸出到文件——logging.basicConfig

我們還可以將日誌輸出到文件,只需要在logging.basicConfig函數中設置好輸出文件的文件名和寫文件的模式。

import logging
 
logging.basicConfig(level=logging.WARNING,
                    filename='./log/log.txt',
                    filemode='w',
                    format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
# use logging
logging.info('this is a loggging info message')
logging.debug('this is a loggging debug message')
logging.warning('this is loggging a warning message')
logging.error('this is an loggging error message')
logging.critical('this is a loggging critical message')

運行之後,打開該文件./log/log.txt,效果如下:

2015-05-21 17:30:20,282 - log.py[line:12] - WARNING: this is loggging a warning message
2015-05-21 17:30:20,282 - log.py[line:13] - ERROR: this is an loggging error message
2015-05-21 17:30:20,282 - log.py[line:14] - CRITICAL: this is a loggging critical message

2.3 既要把日誌輸出到控制檯, 還要寫入日誌文件——自定義logger

這就需要一個叫作Logger 的對象來幫忙,下面將對他進行詳細介紹,現在這裏先學習怎麼實現把日誌既要輸出到控制檯又要輸出到文件的功能。

import logging
 
# 第一步,創建一個logger
logger = logging.getLogger()
logger.setLevel(logging.INFO)    # Log等級總開關
 
# 第二步,創建一個handler,用於寫入日誌文件
logfile = './log/logger.txt'
fh = logging.FileHandler(logfile, mode='w')
fh.setLevel(logging.DEBUG)   # 輸出到file的log等級的開關
 
# 第三步,再創建一個handler,用於輸出到控制檯
ch = logging.StreamHandler()
ch.setLevel(logging.WARNING)   # 輸出到console的log等級的開關
 
# 第四步,定義handler的輸出格式
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
fh.setFormatter(formatter)
ch.setFormatter(formatter)
 
# 第五步,將logger添加到handler裏面
logger.addHandler(fh)
logger.addHandler(ch)
 
# 日誌
logger.debug('this is a logger debug message')
logger.info('this is a logger info message')
logger.warning('this is a logger warning message')
logger.error('this is a logger error message')
logger.critical('this is a logger critical message')

2015-05-21 17:47:50,292 - log.py[line:30] - WARNING: this is a logger warning message
2015-05-21 17:47:50,292 - log.py[line:31] - ERROR: this is a logger error message
2015-05-21 17:47:50,293 - log.py[line:32] - CRITICAL: this is a logger critical message
在logger.txt中,可以看到:
2015-05-21 17:47:50,292 - log.py[line:29] - INFO: this is a logger info message
2015-05-21 17:47:50,292 - log.py[line:30] - WARNING: this is a logger warning message
2015-05-21 17:47:50,292 - log.py[line:31] - ERROR: this is a logger error message
2015-05-21 17:47:50,293 - log.py[line:32] - CRITICAL: this is a logger critical message

【解析】

可以發現,實現這個功能一共分5步:

第一步,創建一個logger;第二步,創建一個handler,用於寫入日誌文件;第三步,再創建一個handler,用於輸出到控制檯;第四步,定義handler的輸出格式;第五步,將logger添加到handler裏面。這段代碼裏面提到了好多概念,包括:Logger,Handler,Formatter。後面講對這些概念進行講解。

3 日誌格式說明

可以指定日誌的輸出格式format,這個參數可以輸出很多有用的信息,如上例所示:

  • %(levelno)s: 打印日誌級別的數值
  • %(levelname)s: 打印日誌級別名稱
  • %(pathname)s: 打印當前執行程序的路徑,其實就是sys.argv[0]
  • %(filename)s: 打印當前執行程序名
  • %(funcName)s: 打印日誌的當前函數
  • %(lineno)d: 打印日誌的當前行號
  • %(asctime)s: 打印日誌的時間
  • %(thread)d: 打印線程ID
  • %(threadName)s: 打印線程名稱
  • %(process)d: 打印進程ID
  • %(message)s: 打印日誌信息

我在工作中給的常用格式在前面已經看到了。就是:

format=’%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s’

這個格式可以輸出日誌的打印時間,是哪個模塊輸出的,輸出的日誌級別是什麼,以及輸入的日誌內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章