logging的作用:python中,logging模塊主要是處理日誌的。所謂日誌,可理解為在軟件運行過程中,所記錄的的一些運行情況信息,軟件開發人員可以根據自己的需求添加日誌,日誌可以幫助軟件開發人員瞭解軟件的運行信息。
【1】通過logging.basicConfig函數對日誌的輸出格式及方式做相關配置
import logging
import sys
# 輸出不同級別的日誌級別
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a,%Y %m %d %H:%M:%S',
filename='test.log',
filemode='w')#每次運行後都會覆蓋原先的記錄,a的是添加
# 輸出結果:Fri,2018 06 08 08:52:07 logging.py[line:34] DEBUG this is debug info
#
# logging.basicConfig函數各參數:
# filename:指定日誌文件名
# filemode:和file函數意義相同,指定日誌文件的打開模式,’w‘或’a'
# format: 指定輸出的格式和內容,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: 打印日誌信息
# datefmt: 指定時間格式,同time.strftime()
# level: 設置日誌級別,默認為logging.WARNING
# stream: 指定將日誌的輸出流,可以指定輸出到sys.stderr,sys.stdout或者文件,默認輸出到sys.stderr,當stream和filename同時指定時,stream被忽略
logging.debug('this is debug info')
logging.info('this is information')
logging.warning('this is warning message')
logging.error('this is error message')
logging.fatal('this is fatal message, it is same as logger.critical')
logging.critical('this is critical message')
【2】將日誌輸出到文件和控制枱
import logging
import sys
# 獲取logger實例,如果參數為空則返回root logger
logger=logging.getLogger()
#創建一個FileHandler,用於寫入日誌文件
fh=logging.FileHandler('mylog.log')
#再創建一個handler,用於輸出到控制枱
ch=logging.StreamHandler()
## 指定logger輸出格式
formatter=logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
#可以通過setFormatter指定輸出格式
fh.setFormatter(formatter)# 文件日誌
ch.setFormatter(formatter)# 控制枱日誌
# 為logger添加的日誌處理器
logger.addHandler(fh)
logger.addHandler(ch)
# 指定日誌的最低輸出級別,默認為WARN級別
logger.setLevel(logging.DEBUG)
logger.debug('this is debug info')
logger.info('this is information')
logger.warning('this is warning message')
logger.error('this is error message')
logger.critical('this is critical message')
【3】logging日誌之回滾
import logging
from logging.handlers import RotatingFileHandler
#################################################################################################
#定義一個RotatingFileHandler,最多備份5個日誌文件,每個日誌文件最大10M
Rthandler = RotatingFileHandler('myapp.log', maxBytes=10*1024*1024,backupCount=5)
Rthandler.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
Rthandler.setFormatter(formatter)
logging.getLogger('').addHandler(Rthandler)
################################################################################################
logging.StreamHandler: 日誌輸出到流,可以是sys.stderr、sys.stdout或者文件
logging.FileHandler: 日誌輸出到文件
日誌回滾方式,實際使用時用RotatingFileHandler和TimedRotatingFileHandler
logging.handlers.BaseRotatingHandler
logging.handlers.RotatingFileHandler
logging.handlers.TimedRotatingFileHandler
logging.handlers.SocketHandler: 遠程輸出日誌到TCP/IP sockets
logging.handlers.DatagramHandler: 遠程輸出日誌到UDP sockets
logging.handlers.SMTPHandler: 遠程輸出日誌到郵件地址
logging.handlers.SysLogHandler: 日誌輸出到syslog
logging.handlers.NTEventLogHandler: 遠程輸出日誌到Windows NT/2000/XP的事件日誌
logging.handlers.MemoryHandler: 日誌輸出到內存中的制定buffer
logging.handlers.HTTPHandler: 通過"GET"或"POST"遠程輸出到HTTP服務器
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。