logging模块是用来记录日志的,有以下5个级别

logging.info()

logging.debug()

logging.error()
logging.warning()

logging.critical()

logging模块涉及4个主要的类:

logger:提供应用程序可以直接使用的接口

handler:将日志发送到合适的目的输出

filter:用来过滤日志的

formatter:决定日志的输出格式

formatter中以下格式的含义是:

%(filename)s:调用日志输出函数模块的文件名

%(lineno)s:打印对应出现问题日志的行数

%(levelname)s:打印出问题日志的级别

%(module)s:调用日志输出的模块名

%(funcName)s:调用函数输出的函数名

%(process)s:pycharm启动了python的进程号,结束之后,进程消失

import  logging

logger=logging.getLogger("TEST-LOG")
logger.setLevel(logging.DEBUG)
先得到一个logger
ch=logging.StreamHandler()
ch.setLevel(logging.WARNING)
以屏幕输出的方式,并且设定日志最低级别
fh=logging.FileHandler("acess.log")
fh.setLevel(logging.ERROR)
将错误日志打印到文件中
fh_formatter=logging.Formatter('%(asctime)s %(process)s %(filename)s:%(lineno)d  '
                               ' -%(levelname)s: %(message)s')

分别设定屏幕输出和文件输出的格式
ch_formatter=logging.Formatter('%(asctime)s - %(name)s -%(levelname)s - %(message)s')
ch.setFormatter(ch_formatter)
fh.setFormatter(fh_formatter)

logger.addHandler(fh)
logger.addHandler(ch)
添加对象
logger.warning("ddd")
logger.error("error is happened...")

 

 

Handler可以管理文件大小,当文件到达一定大小之后,对文件的进行分割,或者以时间为分割线进行分割。代码如下所示:

import logging,time
from logging import handlers

logger=logging.getLogger("TEST")
得到一个logger
log_file="timelog.log"
日志的名称
#fh=handlers.RotatingFileHandler(filename=log_file,maxBytes=3,backupCount=3,encoding="utf-8")

上面是以文件大小为截断
fh=handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=5,backupCount=3,encoding="utf-8")

上面是以时间为截断,以5秒为截断时间
formatter=logging.Formatter('%(asctime)s %(module)s:%(lineno)d %(message)s')

设置格式
fh.setFormatter(formatter)

设置文件的格式
logger.addHandler(fh)
添加对象
logger.warning("test1")
time.sleep(2)
logger.warning("test2")
logger.warning("test3")
time.sleep(2)
logger.warning("test4")
time.sleep(2)
logger.warning("test5")
logger.warning("test6")