import logging logging.debug('debug message') #調試模式 logging.info('info message') #信息模式 logging.warning('warning message') #警告模式 (默認模式) logging.error('error message') #錯誤模式 logging.critical('critical message') #批判模式 (從上到下,級別依次增高) 打印結果: WARNING:root:warning message ERROR:root:error message CRITICAL:root:critical message Logger名字:消息
默認狀況下Python的logging模塊將日誌打印到了標準輸出中,且只顯示了大於等於WARNING級別的日誌,這說明默認的日誌級別設置爲WARNING(日誌級別等級CRITICAL >函數
ERROR > WARNING > INFO > DEBUG),默認的日誌格式爲日誌級別:Logger名稱:用戶輸出消息。spa
簡單配置:線程
import logging try: s = input("num:") int(s) except: logging.error("輸入的不是數字") else: print('沒錯打印我')
高級配置: 對象配置的模式debug
經過logging.basicConfig函數對日誌的輸出格式及方式作相關配置調試
靈活配置日誌級別,日誌格式,輸出位置:日誌
import logging logging.basicConfig(level=logging.DEBUG, #basicConfig() 各參數 #level設定日誌級別 at='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', #輸出的格式和內容 datefmt='%a, %d %b %Y %H:%M:%S', #指定日期時間格式 filename='/tmp/test.log', #指定日誌文件名,用於建立FiledHandler,把文件存儲到指定文件中,沒有則輸出到屏幕 filemode='w') #文件打開方式(前提是指定了filename),默認爲'a',能夠指定'w' ------------------------- logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message')
配置參數:code
logging.basicConfig()函數中可經過具體參數來更改logging模塊默認行爲,可用參數有:orm
filename:# 用指定的文件名建立FiledHandler,這樣日誌會被存儲在指定的文件中。 filemode:# 文件打開方式,在指定了filename時使用這個參數,默認值爲「a」還可指定爲「w」。 at:# 指定handler使用的日誌顯示格式。 datefmt:# 指定日期時間格式。 level:# 設置rootlogger(後邊會講解具體概念)的日誌級別 stream:# 屏幕流,輸出到屏幕 # 用指定的stream建立StreamHandler。能夠指定輸出到sys.stderr,sys.stdout # 或者文件(f=open(‘test.log’,’w’)),默認爲sys.stderr。 # 若filename和stream同時存在,stream被忽略。
at參數中可能用到的格式化串:對象
%(name)s # Logger的名字 %(levelno)s # 數字形式的日誌級別 %(levelname)s # 文本形式的日誌級別 %(pathname)s # 調用日誌輸出函數的模塊的完整路徑名,可能沒有 %(filename)s # 調用日誌輸出函數的模塊的文件名 %(module)s # 調用日誌輸出函數的模塊名 %(funcName)s # 調用日誌輸出函數的函數名 %(lineno)d # 調用日誌輸出函數的語句所在的代碼行 %(created)f # 當前時間,用UNIX標準的表示時間的浮 點數表示 %(relativeCreated)d # 輸出日誌信息時的,自Logger建立以 來的毫秒數 %(asctime)s # 字符串形式的當前時間。默認格式是 「2003-07-08 16:49:45,896」。逗號後面的是毫秒 %(thread)d # 線程ID。可能沒有 %(threadName)s # 線程名。可能沒有 %(process)d # 進程ID。可能沒有 %(message)s # 用戶輸出的消息
====blog
import logging #1.實例化一個logger對象 log_obj = logging.getLogger() #2.設置日誌等級 log_obj.setLevel(logging.DEBUG) #設置日誌等級,默認是Warning,此處設置DEBUG等級 #3.建立文件句柄(handler),用於(寫入日誌文件 或 輸出到屏幕) fh = logging.FileHandler('test.log',encoding='utf-8') #寫入文件 #文件句柄-日誌文件操做符 sh = logging.StreamHandler() #屏幕流對象, 輸出到屏幕(控制檯) #4.設置輸出格式 f_m1 = logging.atter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') #日誌輸出格式 f_m2 = logging.atter('%(asctime)s - %(name)s [%(levelname)s] %(message)s') #日誌輸出格式 #5.文件或屏幕綁定輸出格式 fh.setatter(f_m1) #文件句柄 綁定 輸出格式 sh.setatter(f_m2) #屏幕 綁定 輸出格式 #6.日誌對象文件或屏幕 log_obj.addHandler(fh) #logger 綁文件句柄 log_obj.addHandler(sh) #logger對象能夠添加多個 文件或屏幕對象 #7.要輸出的日誌對象結果(屬性) log_obj.info('hello!')
文件截斷:
import logging from logging.handlers import RotatingFileHandler logger = logging.getLogger(__name__) logger.setLevel(level=logging.INFO) # logging級別 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 定義一個RotatingFileHandler,最多備份3個日誌文件,每一個日誌文件最大1K rHandler = RotatingFileHandler("log.txt", maxBytes=1 * 1024, backupCount=3, encoding="utf-8") rHandler.setLevel(logging.ERROR) # 日誌文件級別 rHandler.setFormatter(formatter) console = logging.StreamHandler() console.setLevel(logging.INFO) # 控制檯輸出級別 console.setFormatter(formatter) logger.addHandler(rHandler) logger.addHandler(console) logging.debug('debug message') # 調試模式 logging.info('info message') # 信息模式 logging.warning('warning message') # 警告模式 (默認模式) logging.error('error message') # 錯誤模式 logging.critical('critical message') # 批判模式 (從上到下,級別依次增高)