python的日誌模塊爲logging,它能夠將咱們想要的信息輸出保存到一個日誌文件中。html
# cat log import logging logging.debug('This is debug message') logging.info('This is info message') logging.warning('This is warring message') # python log WARNING:root:This is warring message
默認狀況下,logging將日誌打印到屏幕,日誌級別爲WARRING。python
日誌級別的關係爲:CRITICAL》ERROR》WARNING》INFO》DEBUG》NOTEST,可自定義日誌級別。web
2、經過logging.basicConfig函數對日誌的輸出格式及方式作相關配置socket
root@web01:/srv/stackinsider-org/stack/log/logtest# cat log import logging logging.basicConfig( level=logging.DEBUG, #日誌級別,默認爲logging.WARNING format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', #指定時間格式 filename='lxy.log', #日誌文件名,沒有會自動生成 filemode='w' #覆蓋以前log ) logging.debug('This is debug message') logging.info('This is info message') logging.warning('This is warring message')
日誌文件內容以下【若是沒有會自動生成】 # cat lxy.log Thu, 12 Mar 2015 10:13:43 log [line:11] DEBUG This is debug message Thu, 12 Mar 2015 10:13:43 log [line:12] INFO This is info message Thu, 12 Mar 2015 10:13:43 log [line:13] WARNING This is warring message
logging.basicConfig函數各參數:ide
filename:指定日誌文件名函數
filemode:和file函數意義相同,指定日誌文件的打開模式,'w'或者'a'。spa
level:設置日誌級別,默認爲logging.WARNING。線程
datafmt:指定日誌格式,同time.strftime()debug
stream:指定日誌的輸出流,能夠指定輸出到sys.stderr,sys.stdout或者文件,默認輸出到sys.stderr,當stream和filename同時指定時,stream被忽略。日誌
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:打印日誌信息
3、將日誌同時輸出到文件和屏幕
# cat log import logging logging.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='lxy.log', filemode='w' ) #定義一個StreamHandler,將INFO級別或更高級別的日誌信息打印到標準錯誤,並將其添加到當前的日誌處理對象 console=logging.StreamHandler() console.setLevel(logging.INFO)
#控制檯輸出格式,8s表明8個空格 formatter=logging.Formatter('%(name)-8s: %(levelname)-8s %(message)s') console.setFormatter(formatter) logging.getLogger('').addHandler(console) #log信息寫入日誌文件 logging.debug('This is debug message') logging.info('This is info message') logging.warning('This is warring message')
# python log
#控制檯輸出 root : INFO This is info message root : WARNING This is warring message # cat lxy.log
#log文件 Thu, 12 Mar 2015 10:52:29 log [line:20] DEBUG This is debug message Thu, 12 Mar 2015 10:52:29 log [line:21] INFO This is info message Thu, 12 Mar 2015 10:52:29 log [line:22] WARNING This is warring message
4、logging日誌回滾
Rotating英文意思是「旋轉」。
# cat log2 import logging from logging.handler import RotatingFieHandler
#定義一個RotatingFileHandle Rthandler=RotatingFileHandler('lxy.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有一個日誌處理的主對象,其它處理方式都是經過addHandler添加進去的。
logging的幾種handler方式:
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服務
因爲StreamHandler和FileHandler是最經常使用的日誌處理方式,因此直接包含在logging模塊中,而其餘方式則包含在logging.handlrs模塊中。
Python 中文官方文檔
http://python.usyiyi.cn/
Python官方教程中文版v2.7.8
http://python.usyiyi.cn/python_278/tutorial/index.html