log的作用
-debuy调试:程序开发阶段对每一个可能产生的结果进行记录。
-定位:日志具备等级属性,将提示/异常分等级记录,可准确定位程序运行状态
-与IO操作相比,更节省系统资源
log级别
级别 | 何时使用 |
---|---|
DEBUG | 细节信息,仅在提示诊断使用 |
INFO | 确认程序按照预期进行 |
WARNING | 警告信息,表明已经有或即将有错误发生(内存即将不足),程序仍在运行 |
ERROR | 严重错误,程序某些功能已经停止 |
CRITICAL | 严重错误,程序已经停止 |
在python的logging模块中,默认的级别是warning,日志只记录等于或高于初始化等级的信息
import logging
logging.DEBUY('DEBUY message')
logging.WARNING('WARNING message')
运行结果
WARNING:root:WARNING message
上述示例中有几个问题:
- 日志信息直接在窗口打印
- 没有生成(.log)文件
- DEBUG信息并没有打印
- 打印的格式是什么意思,如何添加其他信息,如时间
logging模块初始化
在使用日志功能前,一般需要进行初始化操作,如日志文件名、记录输出格式、日志等级等
初始化函数与参数
logging.basicConfig(**kwargs)
参数名 | 作用 |
---|---|
filename | 指定日志文件名 |
filemode | 创建日志方式,’a’追加,‘w’覆盖 |
format | 输出格式 |
datefmt | 输出格式带有时间时,可规定时间格式 |
style | 指定字符串格式,默认’%(dictionary key)s’ |
level | 日志初始等级 |
handlers | 记录处理程序,如将log信息发送到指定的位置 |
style的说明,style可指定三种字符串格式,style 是 ‘%’,’{ ’ 或’ $ ’ 之一。如果未指定其中一个,则将使用’%’。如果 style 是’%’,则消息格式字符串使用 ‘%()s’ 样式字符串替换;可能的键值在 logrecord-attributes 中。如果样式为’{’,则假定消息格式字符串与 str.format()(使用关键字参数)兼容, 而如果样式为’ $ ’ ,则消息格式字符串应符合string.Template.substitute()。
import logging
logging.basicConfig(format='%(asctime)s %(filename)s:%(levelname)s:%(message)s',datefmt='%y/%m/%d %I:%M:%S',filename='mylog.log',filemode='a',level=logging.DEBUG)
logging.debug("hello")
上述示例的含义是,创建了一个路径在当前运行程序下名为"mylog.log"的日志文件,通过追加方式写入,记录等级为DEBUG,显示格式为"19/05/28 11:21:49 log_May28.py:DEBUG:hello"
注意:程序中的时间格式’%S’必须为大写格式,小写格式报错
关于handlers
从官方文档得知,日志库采用模块化方法,提供了几种组件:记录器、处理程序、过滤器以及格式化程序。
- 记录器公开应用程序代码直接使用的接口
- 处理程序将日志内容(有记录器创建)发送到适当的目标
- 过滤器提供更精细的设施,用于确定输出的日志记录
- Formatters指定最终输出中日志记录的布局