logging模塊

logging

函數式簡單配置

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')  # 批判模式           (從上到下,級別依次增高)
相關文章
相關標籤/搜索