Python 使用logging記錄日誌

Python 使用logging記錄日誌

python的logging模塊

導入logging模塊,調用debug、info、warning、error、critical等函數記錄日誌。默認情況下,logging將日誌打印到屏幕終端,只有日誌級別比WARNING高的日誌纔會被顯示。

import logging

logging.debug("debug message")
logging.info("info message")
logging.warning('warn message')
logging.error('error message')
logging.critical('critical message')

在這裏插入圖片描述

logging模塊基礎概念

在典型的使用場景中,一個日誌記錄器使用一個日誌處理器,一個日誌處理器使用一個日誌格式化。
Logger:日誌記錄器,是應用程序中能直接使用的接口
Handler:日誌處理器,用以表明將日誌保存到什麼地方以及保存多久
Formatter:格式化,用以配置日誌的輸出格式。

配置日誌格式

通過basicConfig方法對日誌進行簡單配置,會在當前目錄下產生一個app.log文件。日誌會保存所有WARN級別及以上級別的日誌。每一條日誌包含了打印日誌的時間、日誌的級別和日誌的內容。

import logging

logging.basicConfig(level=logging.WARN,
                    format='%(asctime)s : %(name)s : %(levelname)s :%(filename)s : [%(lineno)d]: %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S',
                    filename='app.log',
                    filemode='a'
                    )

logging.debug("debug message")
logging.info("info message")
logging.warning('warn message')
logging.error('error message')
logging.critical('critical message')

在這裏插入圖片描述

logging.basicConfig(**kwargs)參數設置
格式 描述
filename 指定文件名
filemode ‘r’、‘w’、’a’ ,默認爲a
datefmt 使用time.strftime()所接受的指定日期/時間格式
level 默認生成的root logger的level是logging.WARNING,低於該級別的就不輸出了,級別排序:CRITICAL>ERROR>WARNING>INFO>DEBUG
LogRecord屬性
屬性名稱 格式 描述
args 參數組成的元組合併到msg中以生成消息或dict
asctime %(asctime)s 創建日誌記錄的時間
created %(created)f 創建日誌記錄的時間由time.time()函數返回時間戳
filename %(filename)s 路徑名的文件名部分
funcName %(funcName)s 包含日誌記錄調用的函數的名稱
levelname %(levelname)s 消息的文本日誌級別
levelno %(levelno)s 消息的數字日誌級別(NOTSET-0、DEBUG-10、INFO-20、WARNING-30、ERROR-40、CRITICAL-50)
lineno %(lineno)d 發出日誌調用的源行號
message %(message)s 已記錄的消息
module %(module)s 模塊(文件名的名稱部分)
msg 在原始日誌記錄調用中傳遞的格式字符串。與args合併以生成消息或任意對象
name %(name)s 用於記錄調用的日誌程序的名稱
pathname %(pathname)s 發出日誌調用的源文件的完整路徑名
process %(process)d 進程ID
processName %(processName)s 進程名

示例

將日誌同時保存到文件和打印到屏幕上

import logging

def set_logger(log_file="./monitor.log"):
	root_logger = logging.getLogger()
	root_logger.setLevel(logging.INFO)
	# 在屏幕上輸出
	sh = logging.StreamHandler()
	# 保存到文件
	fh = logging.FileHandler(log_file,mode='w')
	# 設置日誌級別
	sh.setLevel(logging.WARN)
	fh.setLevel(logging.WARN)
	# 設置日誌顯示的格式
	formatters = logging.Formatter("%(asctime)s : %(name)s : %(levelname)s :%(filename)s : [%(lineno)d]: %(message)s")
	sh.setFormatter(formatters)
	fh.setFormatter(formatters)
	# 把對象加到logger裏
	root_logger.addHandler(sh)
	root_logger.addHandler(fh)
	return root_logger

log = set_logger()

log.debug("debug message")
log.info("info message")
log.warning('warn tttsage')
log.error('error message')
log.critical('critical message')

在這裏插入圖片描述

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