對(duì)于代碼量較大的工程,建議使用logging模塊進(jìn)行輸出。該模塊是線程安全的,可將日志信息輸出到控制臺(tái)、寫入文件、使用TCP/UDP協(xié)議發(fā)送到網(wǎng)絡(luò)等等。
默認(rèn)情況下logging模塊將日志輸出到控制臺(tái)(標(biāo)準(zhǔn)出錯(cuò)),且只顯示大于或等于設(shè)置的日志級(jí)別的日志。日志級(jí)別由高到低為CRITICAL>ERROR>WARNING>INFO>DEBUG>NOTSET,默認(rèn)級(jí)別為WARNING。
以下示例將日志信息分別輸出到控制臺(tái)和寫入文件:
importlogging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s[%(levelname)s]at%(filename)s,%(lineno)d:%(message)s',
datefmt='%Y-%m-%d(%a)%H:%M:%S',
filename='out.txt',
filemode='w')
#將大于或等于INFO級(jí)別的日志信息輸出到StreamHandler(默認(rèn)為標(biāo)準(zhǔn)錯(cuò)誤)
console=logging.StreamHandler()
console.setLevel(logging.INFO)
formatter=logging.Formatter('[%(levelname)-8s]%(message)s')#屏顯實(shí)時(shí)查看,無(wú)需時(shí)間
console.setFormatter(formatter)
logging.getLogger().addHandler(console)
logging.debug('gubed');logging.info('ofni');logging.critical('lacitirc')
通過(guò)對(duì)多個(gè)handler設(shè)置不同的level參數(shù),可將不同的日志內(nèi)容輸入到不同的地方。本例使用在logging模塊內(nèi)置的StreamHandler(和FileHandler),運(yùn)行后屏幕上顯示:
[INFO]ofni
[CRITICAL]lacitirc
out.txt文件內(nèi)容則為:
2022-04-22(Fri)17:10:53[DEBUG]attest.py,25:gubed
2022-04-22(Fri)17:10:53[INFO]attest.py,25:ofni
2022-04-22(Fri)17:10:53[CRITICAL]attest.py,25:lacitirc
除直接在程序中設(shè)置Logger、Handler、Formatter等外,還可將這些信息寫入配置文件。示例如下:
#logger.conf
###############Logger###############
[loggers]
keys=root,Logger2F,Logger2CF
[logger_root]
level=DEBUG
handlers=hWholeConsole
[logger_Logger2F]
handlers=hWholeFile
qualname=Logger2F
propagate=0
[logger_Logger2CF]
handlers=hPartialConsole,hPartialFile
qualname=Logger2CF
propagate=0
###############Handler###############
[handlers]
keys=hWholeConsole,hPartialConsole,hWholeFile,hPartialFile
[handler_hWholeConsole]
class=StreamHandler
level=DEBUG
formatter=simpFormatter
args=(sys.stdout,)
[handler_hPartialConsole]
class=StreamHandler
level=INFO
formatter=simpFormatter
args=(sys.stderr,)
[handler_hWholeFile]
class=FileHandler
level=DEBUG
formatter=timeFormatter
args=('out.txt','a')
[handler_hPartialFile]
class=FileHandler
level=WARNING
formatter=timeFormatter
args=('out.txt','w')
###############Formatter###############
[formatters]
keys=simpFormatter,timeFormatter
[formatter_simpFormatter]
format=[%(levelname)s]at%(filename)s,%(lineno)d:%(message)s
[formatter_timeFormatter]
format=%(asctime)s[%(levelname)s]at%(filename)s,%(lineno)d:%(message)s
datefmt=%Y-%m-%d(%a)%H:%M:%S
此處共創(chuàng)建三個(gè)Logger:root,將所有日志輸出至控制臺(tái);Logger2F,將所有日志寫入文件;Logger2CF,將級(jí)別大于或等于INFO的日志輸出至控制臺(tái),將級(jí)別大于或等于WARNING的日志寫入文件。
程序以如下方式解析配置文件和重定向輸出:
importlogging,logging.config
logging.config.fileConfig("logger.conf")
logger=logging.getLogger("Logger2CF")
logger.debug('gubed');logger.info('ofni');logger.warn('nraw')
logger.error('rorre');logger.critical('lacitirc')
logger1=logging.getLogger("Logger2F")
logger1.debug('GUBED');logger1.critical('LACITIRC')
logger2=logging.getLogger()
logger2.debug('gUbEd');logger2.critical('lAcItIrC')
運(yùn)行后屏幕上顯示:
[INFO]attest.py,7:ofni
[WARNING]attest.py,7:nraw
[ERROR]attest.py,8:rorre
[CRITICAL]attest.py,8:lacitirc
[DEBUG]attest.py,14:gUbEd
[CRITICAL]attest.py,14:lAcItIrC
out.txt文件內(nèi)容則為:
2022-04-22(Fri)20:31:21[WARNING]attest.py,7:nraw
2022-04-22(Fri)20:31:21[ERROR]attest.py,8:rorre
2022-04-22(Fri)20:31:21[CRITICAL]attest.py,8:lacitirc
2022-04-22(Fri)20:31:21[DEBUG]attest.py,11:GUBED
2022-04-22(Fri)20:31:21[CRITICAL]attest.py,11:LACITIRC
以上內(nèi)容為大家介紹了Python之logging模塊重定向,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。