logging模塊

logging基本用法

import logging
import sys

logging.basicConfig(filename='app.log',
level=logging.INFO,format='%(asctime)s %(filename)s--%(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')

#日誌級別從低到高
logging.debug('This message should go to the 厲害了')
logging.info('So should this')
logging.warning('And this, too')
logging.error("test eror")
logging.critical("server is 厲害了")

日誌格式

%(name)sLogger的名字

%(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用戶輸出的消息

logging輸出到屏幕和文件

import logging

#create logger #默認輸出到屏幕
logger = logging.getLogger('TEST_LOG') #logger名
logger.setLevel(logging.DEBUG)

#create console handler and set level to debug 輸出到屏幕
ch = logging.StreamHandler()
ch.setLevel(logging.WARNING)

#create file handler and set level to warning #輸出到文件
fh = logging.FileHandler("access.log")
fh.setLevel(logging.ERROR)

#create formatter 輸出的日誌格式
fh_formatter = logging.Formatter('%(asctime)s '
'- %(levelname)s'
' - %(message)s'
'-%(module)s'
'%(name)s')
ch_formatter = logging.Formatter(
'- %(levelname)s %(filename)s: - %(message)s')

fh.setFormatter(fh_formatter)
ch.setFormatter(ch_formatter)
logger.addHandler(fh)
logger.addHandler(ch)

logger.debug('This message should go to the log file')
logger.info('So should this')
logger.warning('And this, too')
logger.error("test eror")
logger.critical("server is down")

logging自動截斷

when參數是一個字符串。表示時間間隔的單位,不區分大小寫。它有以下取值:

S 秒

M 分

H 小時

D 天

W 每星期(interval==0時代表星期一)

midnight 每天凌晨

import logging

from logging import handlers

logger = logging.getLogger("TEST")

log_file = "time.log"
#fh = handlers.RotatingFileHandler(filename=log_file,backupCount=3,maxBytes=10,encoding="utf-8") #按字節和文件數量截斷
fh = handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=5,backupCount=3) #按時間來截斷同時按照文件數量截斷

formatter = logging.Formatter('%(asctime)s %(module)s:%(lineno)d %(message)s')

fh.setFormatter(formatter)

logger.addHandler(fh)

logger.warning("test1") #按文件數量截斷
logger.warning("test12")
logger.warning("test13")
logger.warning("test14")
logger.warning("test15")
logger.warning("test16")

import time #按時間截斷
logger.warning("test1")
time.sleep(3)
logger.warning("test12")
time.sleep(3)
logger.warning("test13")
time.sleep(3)
logger.warning("test14")
logger.warning("test15")
time.sleep(3)
logger.warning("test16")

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