對于代碼量較大的工程,建議使用logging模塊進行輸出。該模塊是線程安全的,可將日志信息輸出到控制臺、寫入文件、使用TCP/UDP協(xié)議發(fā)送到網(wǎng)絡等等。
默認情況下logging模塊將日志輸出到控制臺(標準出錯),且只顯示大于或等于設置的日志級別的日志。日志級別由高到低為CRITICAL>ERROR>WARNING>INFO>DEBUG>NOTSET,默認級別為WARNING。
以下示例將日志信息分別輸出到控制臺和寫入文件:
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級別的日志信息輸出到StreamHandler(默認為標準錯誤)
console=logging.StreamHandler()
console.setLevel(logging.INFO)
formatter=logging.Formatter('[%(levelname)-8s]%(message)s')#屏顯實時查看,無需時間
console.setFormatter(formatter)
logging.getLogger().addHandler(console)
logging.debug('gubed');logging.info('ofni');logging.critical('lacitirc')
通過對多個handler設置不同的level參數(shù),可將不同的日志內容輸入到不同的地方。本例使用在logging模塊內置的StreamHandler(和FileHandler),運行后屏幕上顯示:
[INFO]ofni
[CRITICAL]lacitirc
out.txt文件內容則為:
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
除直接在程序中設置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)建三個Logger:root,將所有日志輸出至控制臺;Logger2F,將所有日志寫入文件;Logger2CF,將級別大于或等于INFO的日志輸出至控制臺,將級別大于或等于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')
運行后屏幕上顯示:
[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文件內容則為:
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
以上內容為大家介紹了Python之logging模塊重定向,希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。