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")
转载于:https://blog.51cto.com/11834445/1890036