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")