Python进阶(四)-日志
一、logging是什么?作用是什么?
logging是python自带的一个日志模块。
它的作用主要有两个:
1)代替print,可以把大部分你想要调试的信息打印出来或者是输出到指定文件
2)可以对一些输出的调试信息分类做输出,比如说:DEBUG,INFO,WARING,ERROR,CRITICAL
二、logging模块介绍与使用
python使用logging模块记录日志涉及四个主要类,每个类用法如下:
1.logger提供了应用程序可以直接使用的接口
2.handler将(logger创建的)日志记录发送合适的目的输出
3.setLevel提供了细度设备来决定输出哪种级别的日志记录
4.formatter决定日志记录的最终输出格式
三、logger介绍
logger是后续程序可以直接调用的接口,如果不去创建一个logger的话,那么就会默认调用root-logger,因为logger在日志系统里面是有父级和子级的,如果没有创建一个新的logger子级,那么打印日志的时候会直接调用父级。常用方法:getLogger()

四、Setlevel的介绍
我们一般用SetLevel设置日志的输出级别。
1)logging有如下级别:DEBUG,INFO,WARING,ERROR,CRITICAL--->级别正序越来越高。默认级别是WARING
2)logging模块只会输出指定level以上的日志
3)用法:Logger.debug(),Logger.info(),Logger.warning(),Logger.error(),Logger.critical()可以设置的日志级别
这样的好处,就是在项目开发时debug用的log,我们想要什么级别的日志,不需要去改代码,只需要在这个级别设置改变日志的输出级别就可了。
五、logging内容
1.logging模块-主要为一下三个方面
日志级别
日志内容输出格式
日志输出方式
2.日志级别
critical>error>warning>info>debug,notset
级别越高打印的日志越少
六、logging模块handler
StreamHandler
日志信息会输出到指定的stream中,如果stream为空则默认输出到sys.stderr,即控制台
FileHandler
继承自StreamHandler,将日志信息输出到磁盘文件上
默认情况下,日志文件可以无限大
七、logging之handler扩展
logging模块中的handlers模块专门处理日志输出的
常用handlers:
RotatingFileHander:支持循环日志文件。
maxBytes:允许日志文件在达到maxBytes时rollover。当文件大小达到或者超过maxBytes时就会新创建一个日志文件
backupCount:备份数目,也就是最多能有多少个备份。命名会在日志的base_name后面加上.0-.n的后缀
TimedRotatingFileHandler:在RotatingFileHander的基础上,支持定时生成新的日志文件
when:时间间隔类型
八、logging之Formatter
logging.Formatter
用来设置在控制台或者文件中,日志内容的呈现方式。
在创建Formatter对象的时候有如下两个参数:
fmt:日志中具体输出那些内容:日志生成的时间?所在文件?所在代码行?等
fmt = '%(asctime)s %(filename)s %(funcName)s [line: %(lineno)d] %(levelname)s %(message)s'
datafmt:时间格式。默认格式:%Y-%m-%d %H:%M:%S
datafmt='%Y-%m-%d %H:%M:%S'
注:在Formatter类中有说明fmt可以选用的选项
九、步骤总结
1.创建一个日志收集器logger=logging.getlogger()
2.创建一个handler :以下的任意类型都可以 handler=logging.FileHandler(filename,mode="w")
FileHandler:输出到文件中
RotatingFileHandler:输出到文件中
StreamHandler:输出到控制台
3、1)设置Formatter,其中有两个参数:fmt和datafmt
fm= logging.Formatter(fmt,datdafmt)
handler.SetFormatter(fm)
2)设置输出级别:SetLevel
handler.SetLevel(logging.INFO)
4.将handler加入到logging中:logger.addHandler(handler)


浙公网安备 33010602011771号