记录日志是追踪事件的一种手段。通过添加日志,开发者可以清楚地了解发生了哪些事件,包括出现了哪些错误。logging 模块提供了一系列便捷的函数,用于简单的日志记录。它们分别是 debug(), info(), warning(), error() 和 critical()。
1. 简单例子:
输出
- 运行之后控制台输出日志,另外在相同的目录之下创建一个test.log用于记录日志,里面也存放着相同的内容。
- 要在日志中显示日期和时间,你需要在格式串中加入 %(asctime)s,格式串中的时间格式参数与中支持的参数相同。 strftime
- %(message)s 是可以输入到格式化的数据,比如这里的’foorbar’
2. logging模块常用的API
2.1 logging.getLogger([name])
- 返回一个logger实例,如果没有指定name,返回root logger。
- 只要name相同,返回的logger实例都是同一个而且只有一个,即name和logger实例是 一一对应的。这意味着,无需把logger实例在各个模块中传递。只要知道name,就能得到同一个logger实例。
- Logger是一个树形层级结构,在使用接口debug,info,warn,error,critical之前必须创建Logger实例,即创建一个记录器,如果没有显式的进行创建,则默认创建一个root logger,并应用默认的日志级别(WARN),处理器Handler(StreamHandler,即将日志信息打印输出在标准输出上),和格式化器Formatter(默认的格式即为第一个简单使用程序中输出的格式)。
- 创建Logger实例后,可以使用以下方法进行日志级别设置,增加处理器Handler。
logger.setLevel(logging.ERROR) # 设置日志级别为ERROR,即只有日志级别大于等于ERROR的日志才会输出
logger.addHandler(handler_name) # 为Logger实例增加一个处理器 -logger.removeHandler(handler_name) # 为Logger实例删除一个处理器
2.2 Logger.setLevel(lvl)
设置logger的level, level有以下几个级别:
3.1 root logger是默认的logger
- 如果不创建logger实例, 直接调用logging.debug()、logging.info()logging.warning()、logging.error()、logging.critical()这些函数, 那么使用的logger就是 root logger, 它可以自动创建,也是单实例的。
3.2 如何得到root logger/h2>
- 通过logging.getLogger()或者logging.getLogger(“”)得到root logger实例。
3.3 默认的level
- root logger默认的level是logging.WARNING
3.4 如何表示父子关系/h3>
logger的name的命名方式可以表示logger之间的父子关系. 比如:parent_logger = logging.getLogger(‘foo’)child_logger = logging.getLogger(‘foo.bar’)
3.5 什么是effective level/h3>
- logger有一个概念,叫effective level。 如果一个logger没有显示地设置level,那么它就用父亲的level。如果父亲也没有显示地设置level, 就用父亲的父亲的level,以此推….最后到达root logger,一定设置过level。默认为logging.WARNINGchild loggers得到消息后,既把消息分发给它的handler处理,也会传递给所有祖先logger处理,
输出:
可见, 孩子logger没有任何handler,所以对消息不做处理。但是它把消息转发给了它的父亲以及root logger。最后输出两条日志。
参考文章:
- 官方参考文档:PEP 282 – A Logging System
- 使用python的logging模块
- python logging模块使用教程
- Python logging 模块使用指南
- ipython笔记
文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树首页概览212363 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!