python第三方庫系列之七--logging庫

跑程序猶如走人生,有些美好的、不美好的事需要記錄下來,慢慢斟酌~

logging模塊由此而生,記錄那些你想記錄的事~

一、將日誌打印到屏幕

import logging

logging.debug('this is a bug information')
logging.info('this is a info information')
logging.warning('this is a warning information')
logging.error('this is a error information')
logging.critical('this is a critical information')

# 屏幕上打印
# WARNING:root:this is a warning information
# ERROR:root:this is a error information
# CRITICAL:root:this is a critical information
一般的,日誌級別大小關係爲:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,當然也可以自己定義日誌級別。而且,默認情況下,logging將日誌打印到屏幕,日誌級別爲WARNING,所以,我們寫的debug和info被忽略,不會打印。

二、將日誌打印到文件

1. 利用logging.basicConfig()來配置

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='myapp.log',
                    filemode='w')
logging.debug('this is a bug information')
logging.info('this is a info information')
logging.warning('this is a warning information')
logging.error('this is a error information')
logging.critical('this is a critical information')

# myapp.log文件裏打印
#Mon, 24 Nov 2014 23:19:32 loggingTest.py[line:11] DEBUG this is a bug information
#Mon, 24 Nov 2014 23:19:32 loggingTest.py[line:12] INFO this is a info information
#Mon, 24 Nov 2014 23:19:32 loggingTest.py[line:13] WARNING this is a warning information
#Mon, 24 Nov 2014 23:19:32 loggingTest.py[line:14] ERROR this is a error information
#Mon, 24 Nov 2014 23:19:32 loggingTest.py[line:15] CRITICAL this is a critical information
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被忽略

2. 利用FileHandler來配置

import logging
from logging import FileHandler
LOG_PATH = '/home/tops/adms-agent/logs'

logging.basicConfig(level=logging.DEBUG)
file_time_handler = FileHandler(LOG_PATH+'/adms-agent.log')
file_time_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - {%(filename)s:%(funcName)s:%(lineno)d}: %(message)s"))
file_time_handler.suffix = "%Y-%m-%d.log"
log = logging.getLogger("adms-agent")
log.addHandler(file_time_handler)

logging.debug('this is a bug information')
logging.info('this is a info information')
logging.warning('this is a warning information')
logging.error('this is a error information')
logging.critical('this is a critical information')

以上只是舉個例子用FileHandler來把日誌寫到文件,其實有很多種日誌重定向方法,例如:

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服務器

三、logging是線程安全的



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章