handler 日志输出
formatter格式化
logging模块介绍与使用
python使用logging模块记录日志涉及四个主要类:每个类的用法功能如下:
logger提供了应用程序可以直接使用的接口
handler将(logger创建的)的日志记录发送到合适的目的地输出
setLevel提供了细度设备来决定输出哪种级别的日志记录
formatter决定日志记录的最终输出格式
logging是什么,作用是什么
logging 是python一个自带的日志模块
他的作用主要是有两个:
1)代替print 可以把大部分你想要进行调试的信息打印出来或者是输出到指定文件
2)可以对一些输出的调试信息分类做输出:比如说DEBUG INFO WARNING ERROR CRITICAL
#导入
import logging
日志一共有这几种级别:DEBUG INFO WARNING ERROR CRITICAL
你要把你的信息设置为不同的级别,可以用以下几种方式
logging.info(" ")
logging.debug( " ")
logging.warning(" ")
logging.error(" ")
logging.critical(" ")
日志用在哪里
任何你想用的地方 日志就是操作记录,你想输出到哪里就输出到哪里
critical>error>warning>info>debug,notset
级别越高打印的日志越少
debug:打印全部的日志(noteset等同于debug)
info :打印info warning error critical级别的日志
warning:打印warning error critical级别的日志
error:打印error critical级别的日志
critical 打印critical级别的日志
logging模块Handler
StreamHandler
日志信息会输出到指定的stream中,如果stream为空则默认输出到sys.stderr,即控制台
FileHandler
继承自StreamHandler,将日志信息输出到磁盘文件上
默认情况下,日志文件可以无限增大
logging模块中的handlers模块专门用来处理日志输出的
位于logging.handlers'
常用handlers
RotatingFileHandler:支持循环日志文件
maxBytes:允许日志文件在达到maxBytes市rollover,当文件大小达到或者超过maxBytes时,就会新创建一个日志文件
backupCOunt:备份数目,也就是最多能有多少个文件,明明会在日志的base_name后面加上.0-.n的后缀。如果超过指定的文件数目,会从头覆盖
TimeRotatingFileHandler 在RotatingFileHandler的基础上,支持定时生成新的日志文件
when:时间间隔的类型
import logging
logger=logging.getLogger("excel") #实例化创建自己的logger对象
logger.setLevel(logging.INFO) #设置日志输出级别,str或int型
#Formatter日志的输出格式 #创建时间,级别名字,文件名字,函数名字,哪一行,输出的消息
fmt="%(asctime)s %(levelname)s %(filename)s %(funcName)s [line:%(lineno)d] %(message)s"
datefmt='%a, %d %b %Y %H:%M:%S' #输出的时间格式
formate=logging.Formatter(fmt,datefmt) #formatter是logging下面一个类 传参
#Handler
#输出到控制台
handler_1=logging.StreamHandler() #默认的话输出到控制台 类需要初始化
handler_1.setFormatter(formate) #设置输出格式
logger.addHandler(handler_1) #把输出地址,输出格式绑定到我自己的日志输出对象logger下面
# 输出到文件 运行后会在当前文件夹下创建换一个文件写入
handler_2=logging.FileHandler("mylog.log") #给一个文件名会默认按追加的模式往里面写内容
handler_2.setFormatter(formate)
logger.addHandler(handler_2)
# logger.error("this is error")
# logger.debug("this is debug")
# logger.critical("critical")
# for index in range(100):
# logger.error("this is error")
# 输出内容
# Wed, 06 Dec 2017 22:28:33 INFO logging note.py <module> [line:19] 11111111111111111111111111
# Wed, 06 Dec 2017 22:28:33 ERROR logging note.py <module> [line:20] this is error
# Wed, 06 Dec 2017 22:28:33 CRITICAL logging note.py <module> [line:22] critical
# RotatingFileHandler 1024=1kb 1024*1024=1M
from logging.handlers import RotatingFileHandler,TimedRotatingFileHandler #导入模块
import os
handler_3=RotatingFileHandler(os.getcwd()+"/mylog/mylog.log",maxBytes=1024,backupCount=5) #给一个文件名会默认按追加的模式往里面写内容
handler_3.setFormatter(formate) #配置输出格式
logger.addHandler(handler_3)
for index in range(100):
logger.error("this is error")
handler_4=TimedRotatingFileHandler(os.getcwd()+"/mylog/mylog.log",when="s",interval=1,backupCount=5) #给一个文件名会默认按追加的模式往里面写内容
handler_4.setFormatter(formate) #配置输出格式
logger.addHandler(handler_4)
for index in range(100):
logger.error("this is error")