本文實(shí)例講述了Python內(nèi)置模塊logging用法。分享給大家供大家參考,具體如下:
1、將日志直接輸出到屏幕
import logginglogging.debug('This is debug message')logging.info('This is info message')logging.warning('This is warning message')# 默認(rèn)情況下,logging將日志打印到屏幕,日志級(jí)別為WARNING;#output====================================# WARNING:root:This is warning message2.通過(guò)logging.basicConfig函數(shù)對(duì)日志的輸出格式及方式做相關(guān)配置
import logginglogging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='myapp.log', filemode='w')logging.debug('This is debug message')logging.info('This is info message')logging.warning('This is warning message')#./myapp.log文件中內(nèi)容為:#Sun, 24 May 2009 21:48:54 demo2.py[line:11] DEBUG This is debug message#Sun, 24 May 2009 21:48:54 demo2.py[line:12] INFO This is info message#Sun, 24 May 2009 21:48:54 demo2.py[line:13] WARNING This is warning messagelogging.basicConfig參數(shù):
#logging.basicConfig函數(shù)各參數(shù):
filename: 指定日志文件名
filemode: 和file函數(shù)意義相同,指定日志文件的打開(kāi)模式,'w'或'a'
format: 指定輸出的格式和內(nèi)容,format可以輸出很多有用信息,如上例所示:
%(levelno)s: 打印日志級(jí)別的數(shù)值
%(levelname)s: 打印日志級(jí)別名稱
%(pathname)s: 打印當(dāng)前執(zhí)行程序的路徑,其實(shí)就是sys.argv[0]
%(filename)s: 打印當(dāng)前執(zhí)行程序名
%(funcName)s: 打印日志的當(dāng)前函數(shù)
%(lineno)d: 打印日志的當(dāng)前行號(hào)
%(asctime)s: 打印日志的時(shí)間
%(thread)d: 打印線程ID
%(threadName)s: 打印線程名稱
%(process)d: 打印進(jìn)程ID
%(message)s: 打印日志信息
datefmt: 指定時(shí)間格式,同time.strftime()
level: 設(shè)置日志級(jí)別,默認(rèn)為logging.WARNING
stream: 指定將日志的輸出流,可以指定輸出到sys.stderr,sys.stdout或者文件,默認(rèn)輸出到sys.stderr,當(dāng)stream和filename同時(shí)指定時(shí),stream被忽略
3、將日志同時(shí)輸出到多個(gè)Handler
先定義一個(gè)住handler,并使用addHander()添加到主handler,實(shí)現(xiàn)日志輸出到多個(gè)handler.
a、同時(shí)輸出到文件和屏幕
import logging#設(shè)置一個(gè)basicConfig只能輸出到一個(gè)Handlerlogging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='myapp.log', filemode='w')#定義一個(gè)StreamHandler,將INFO級(jí)別或更高的日志信息打印到標(biāo)準(zhǔn)錯(cuò)誤,并將其添加到當(dāng)前的日志處理對(duì)象#console = logging.StreamHandler()console.setLevel(logging.INFO)formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')console.setFormatter(formatter)logging.getLogger('').addHandler(console)#輸出到文件的log級(jí)別為debug,輸出到stream的log級(jí)別為infologging.debug('This is debug message')logging.info('This is info message')logging.warning('This is warning message')b、添加一個(gè)handler:輸出到文件,并根據(jù)文件大小滾動(dòng)存儲(chǔ)
在a的基礎(chǔ)上添加一個(gè)handler
from logging.handlers import RotatingFileHandler#定義一個(gè)RotatingFileHandler,最多備份5個(gè)日志文件,每個(gè)日志文件最大10MRthandler = 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幾種Handler類型:
logging.StreamHandler(默認(rèn)): 日志輸出到流,可以是sys.stderr、sys.stdout或者文件
logging.FileHandler: 日志輸出到文件
logging.handlers.RotatingFileHandler 日志輸出到文件,基于文件大小滾動(dòng)存儲(chǔ)日志
logging.handlers.TimedRotatingFileHandler 日志輸出到文件,基于時(shí)間周期滾動(dòng)存儲(chǔ)日志
logging.handlers.SocketHandler: 遠(yuǎn)程輸出日志到TCP/IP sockets
logging.handlers.DatagramHandler: 遠(yuǎn)程輸出日志到UDP sockets
logging.handlers.SMTPHandler: 遠(yuǎn)程輸出日志到郵件地址
logging.handlers.SysLogHandler: 日志輸出到syslog
logging.handlers.NTEventLogHandler: 遠(yuǎn)程輸出日志到Windows NT/2000/XP的事件日志
logging.handlers.MemoryHandler: 日志輸出到內(nèi)存中的制定buffer
logging.handlers.HTTPHandler: 通過(guò)"GET"或"POST"遠(yuǎn)程輸出到HTTP服務(wù)器
4、通過(guò)配置文件配置logger
a、定義配置文件logger.conf
#logger.conf###############################################[loggers]keys=root,example01,example02[logger_root]level=DEBUGhandlers=hand01,hand02[logger_example01]handlers=hand01,hand02qualname=example01propagate=0[logger_example02]handlers=hand01,hand03qualname=example02propagate=0###############################################[handlers]keys=hand01,hand02,hand03[handler_hand01]class=StreamHandlerlevel=INFOformatter=form02args=(sys.stderr,)[handler_hand02]class=FileHandlerlevel=DEBUGformatter=form01args=('myapp.log', 'a')[handler_hand03]class=handlers.RotatingFileHandlerlevel=INFOformatter=form02args=('myapp.log', 'a', 10*1024*1024, 5)###############################################[formatters]keys=form01,form02[formatter_form01]format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)sdatefmt=%a, %d %b %Y %H:%M:%S[formatter_form02]format=%(name)-12s: %(levelname)-8s %(message)sdatefmt=b、logging.config獲取配置
import loggingimport logging.configlogging.config.fileConfig("logger.conf")logger = logging.getLogger("example01")logger.debug('This is debug message')logger.info('This is info message')logger.warning('This is warning message')import loggingimport logging.configlogging.config.fileConfig("logger.conf")logger = logging.getLogger("example02")logger.debug('This is debug message')logger.info('This is info message')logger.warning('This is warning message')希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選