橙好科技logging模块教程
文章目录
1-logging介绍
logging模块都知道是用来输出日志的,但是我们为什么要用它呢,他到底哪点好看?还是有特长?嘿嘿,今天超哥就来告诉你
以前我们都习惯用print,以为很方便,但是有利必有弊,print虽然能让你一时爽,后期代码部署上线,你需要挨个注释或者删除,代码冗余,费时费力。说到这里,logging的优势也就显而易见了,首先我们使用log代替print后,和print一样可以排查问题,更重要的是他可以全局统一管理,定制输出的日志格式,比如输出代码行,文件名称,日志时间,还可以根据代码逻辑分别输出调试日志和错误日志,更牛逼的是以后代码部署上线的时候,我们可以通过控制日志级别来控制哪些日志可以输出,哪些日志不再输出,是不是很强大?
2-日志作用
- 方便排查问题
- 对日志进行分级
- 方便代码维护部署
先来看下最简单的日志输出代码:
代码示例:
import logging
logging.debug("This is a debug log.")
logging.info("This is a info log.")
logging.warning("This is a warning log.")
logging.error("This is a error log.")
logging.critical("This is a critical log.")
输出:
日志说明:这是不配置日志时默认的输出内容
1-日志级别 :2-根日志记录器 :3-日志内容
相信你已经看到了,日志只输出了后三者(级别),因为日志默认warning级别,所以其他两个更低的级别不会输出了,但是这样的日志太简单了,不具有配置性,所以我们如果想要定制化的日志,就需要basicConfig了。
3-日志配置basicConfig
日志输出统一使用basicConfig进行配置,配置的参数如下:
参数 | 描述 |
---|---|
filename | 指定日志输出的文件名(fileHandler)如果不指定则默认输出到控制台。eg:filename=‘automatio.log’ |
filemode | 指定打开文件的模式,如果指定了filename(如果文件模式未指定,则默认为’a’)。eg: filemode=‘a’ |
level | 将根记录器级别设置为指定的级别。eg:level=loggin.INFO |
format | 为处理程序使用指定的格式字符串。eg: format=’%(name)s-%(asctime)s’ |
datefmt | 使用指定的日期/时间格式。 |
handlers | 如果指定,这应该是一个已经创建的处理程序的迭代器添加到根记录器。否则默认输出到控制台 |
代码示例:
def log():
#使用basicConfig配置日志,level和format
logging.basicConfig(level=logging.INFO, format='%(name)s-%(asctime)s-%(levelname)s-%(message)s')
#使用getLogger方法设置日志记录器,不设置的话默认:root
logger = logging.getLogger('Test')
return logger
logger = log()
logger.info("这是定制化的日志")
输出:
3-日志级别level
log一共五个级别,分别是:
级别 | 数值 |
---|---|
CRITICAL | 50 |
ERROR | 40 |
WARNING | 30,默认 |
INFO | 20 |
DEBUG | 10 |
NOTSET | 0 |
日志配置:basicConfig,默认控制台输出,默认日志级别是WARNING,低于该级别的就不输出了
级别排序 :CRITICAL > ERROR > WARNING > INFO > DEBUG
关于级别的解释:
-
debug : 级别最低的日志,最为详细的日志,一般用来排查问题
-
info : 一般可作为正常输出的日志
-
warning : 一般用来输出警告的日志,但是不会影响代码执行
-
error : 一般在出错的代码逻辑中使用,说明目前代码报错,用来输出具体的错误信息
-
critical : 最高级别日志,一般用在程序崩溃的日志输出
这时候,如果需要显示低于WARNING级别的内容,可以引入NOTSET级别来显示:
代码示例1:
import logging # 引入logging模块
logging.basicConfig(level=logging.INFO) # 设置日志级别
logging.debug("这是debug级别的日志") #因为预设置的日志级别为INFO,所以小于该级别的日志不输出
logging.info("这是debug级别的日志") #正常输出
输出:
日志输出解释:
第一部分:INFO-为日志级别;
第二部分:root-为默认的日志记录器名称;如果通过getlogger指定日志记录器名称,则root会改为指定的名称
第三部分:这是debug级别的日志-这是日志内容
代码示例2:
def log():
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger('test')
return logger
logger = log()
logger.debug("这是设置了日志记录器的样子")
输出: