python中logging生成日誌模塊的使用

用於便捷記錄日誌且線程安全的模塊

一、日誌級別

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

DEBUG:詳細的信息,一般只出如今診斷問題上python

INFO:確認一切按預期運行安全

WARNING:一個跡象代表,一些意想不到的事情發生了,或代表一些問題在不久的未來(例如。磁盤空間低」)。這個軟件還能按預期工做。函數

ERROR:更嚴重的問題,軟件沒能執行一些功能spa

CRITICAL:一個嚴重的錯誤,這代表程序自己可能沒法繼續運行。線程

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

二、日誌輸出

有兩種方式記錄跟蹤,一種輸出控制檯,另外一種是記錄到文件中,如日誌文件。

三、注意問題

用Python的logging模塊記錄日誌時,遇到了重複記錄日誌的問題,第一條記錄寫一次,第二條記錄寫兩次,第三條記錄寫三次。。。這樣記日誌可不行。
緣由:沒有移除handler 
解決:在日誌記錄完以後removeHandler

使用方法

一、單日誌文件

建立一個日誌模塊.py的文件日誌

import logging
  
  
logging.basicConfig(filename='log.log',
                    format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S %p',
                    level=10)
  
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
logging.log(10,'log')

運行:

從運行結果來看,建立了一個log.log日誌文件,時間是自動生產的,module是咱們當前的python代碼文件名。code

日誌等級:orm

CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0

注:只有【當前寫等級】大於【日誌等級】時,日誌文件才被記錄。
日誌記錄格式:對象

%(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將沒法完成,須要自定義文件和日誌操做對象。

import logging

# 定義文件
file1 = logging.FileHandler(filename='l1.log', mode='a', encoding='utf-8')
fmt = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s", datefmt='%Y-%m-%d %H:%M:%S')
file1.setFormatter(fmt)

file2 = logging.FileHandler(filename='l2.log', mode='a', encoding='utf-8')
fmt = logging.Formatter()
file2.setFormatter(fmt)

# 定義日誌
logger1 = logging.Logger(name='這裏是name', level=logging.ERROR)
logger1.addHandler(file1)
logger1.addHandler(file2)
# logger1.removeHandler(file1)
# logger1.removeHandler(file2)

# 寫日誌
logger1.error(msg='這裏是msg111')
logger1.log(msg='這裏是msg222', level=50)


# 定義文件
file3 = logging.FileHandler(filename='l3.log', mode='a', encoding='utf-8')
fmt = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s", datefmt='%Y-%m-%d %H:%M:%S')
file3.setFormatter(fmt)

# 定義日誌
logger2 = logging.Logger(name='這裏是name222222', level=logging.INFO)
logger2.addHandler(file3)

# 寫日誌
logger2.info('這裏是msg333333')

運行:

如上述建立的兩個日誌對象

  • 當使用【logger1】寫日誌時,會將相應的內容寫入 l1.log 和 l2.log 文件中
  • 當使用【logger2】寫日誌時,會將相應的內容寫入 l3.log 文件中
相關文章
相關標籤/搜索