文章目录
logging模块
logging模块简单点说就是我们经常提到的日志
最简单的使用方法
- 更多免费分享请点击这里
- logging最简单的使用方式就是在终端显示程序运行日志,它有几个等级,如下图
import logging
logging.debug("debug_msg")
logging.info("info_msg")
logging.warning("warning_msg")
logging.error("error_msg")
logging.critical("critical_msg")
终端显示结果:
WARNING:root:warning_msg
ERROR:root:error_msg
CRITICAL:root:critical_msg
- 注意:默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG)
- 默认输出格式为
日志级别:Logger名称:用户输出消息
WARNING:root:0
- 如果我们想显示debug/info低等级的日志,可以引入NOTSET级别来显示
import logging # 引入logging模块
logging.basicConfig(level=logging.NOTSET) # 设置日志级别
logging.debug("如果设置了日志级别为NOTSET,那么这里可以采取debug、info的级别的内容也可以显示在控制台上了")
- 结果如下
部分名词解释
Logging.Logger:Logger是Logging模块的主体,进行以下三项工作:
1. 为程序提供记录日志的接口
2. 判断日志所处级别,并判断是否要过滤
3. 根据其日志级别将该条日志分发给不同handler
常用函数有:
Logger.setLevel() 设置日志级别
Logger.addHandler() 和 Logger.removeHandler() 添加和删除一个Handler
Logger.addFilter() 添加一个Filter,过滤作用
Logging.Handler:Handler基于日志级别对日志进行分发,如设置为WARNING级别的Handler只会处理WARNING及以上级别的日志。
常用函数有:
setLevel() 设置级别
setFormatter() 设置Formatter
自定义logging源码(自用)
# _*_ coding : UTF-8 _*_
# 微信公众号:xiaoqiangclub
# 开发时间: 2020/2/21 21:49
# 文件名称: def_logging.py
# 开发工具: PyCharm
import logging
def diy_logging(show=True, save_address="./log.log"):
'''
这是一个自定义logging日志显示的函数,默认显示/保存所有等级的日志信息,显示/保存只能启动一项
:param show: 设定日志是显示终端还是保存在日志文件,默认为True:在终端显示
:param save_address: 日志保存路径,如"D:/log.log".默认保存在当前目录log.log文件中
:return: None
:type show: bool
:type save_address: str
'''
LOG_FORMAT = "%(asctime)s %(filename)s %(funcName)s [%(lineno)d] %(levelname)s: %(message)s" # 配置输出日志格式
# LOG_FORMAT = "%(asctime)s 【%(filename)s 文件中的 %(funcName)s 函数,在第 [%(lineno)d] 行发出 %(levelname)s 日志】: %(message)s" # 配置输出日志格式,这种格式日志包含中文,显示可能出现乱码
DATE_FORMAT = '%Y-%m-%d %H:%M:%S ' # 配置输出时间的格式,注意月份和天数不要搞乱了
if show:
logging.basicConfig(level=logging.DEBUG, # 设置日志等级
format=LOG_FORMAT, # 设置时间显示样式
datefmt=DATE_FORMAT, # 设置日志显示信息
)
else:
logging.basicConfig(level=logging.DEBUG, # 设置日志等级
format=LOG_FORMAT, # 设置时间显示样式
datefmt=DATE_FORMAT, # 设置日志显示信息
filename=save_address # 有了filename参数就不会直接输出显示到控制台,而是直接写入文件
)
if __name__ == "__main__":
diy_logging(False)
logging.debug("hfhf")
logging.basicConfig()函数
logging.basicConfig()
函数可以调整日志级别、输出格式等,如下图
import logging
logging.basicConfig(level=logging.DEBUG,#设置显示等级
format="%(asctime)s %(name)s %(levelname)s %(message)s",
datefmt = '%Y-%m-%d %H:%M:%S %a' #注意月份和天数不要搞乱了,这里的格式化符与time模块相同
)
logging.debug("msg1")
logging.info("msg2")
logging.warning("msg3")
logging.error("msg4")
logging.critical("msg5")
运行结果:
2018-05-09 23:37:49 Wed root DEBUG msg1
2018-05-09 23:37:49 Wed root INFO msg2
2018-05-09 23:37:49 Wed root WARNING msg3
2018-05-09 23:37:49 Wed root ERROR msg4
2018-05-09 23:37:49 Wed root CRITICAL msg5
basicConfig()函数的参数说明
format格式字符串
- 更多免费分享请点击这里
- logging模块中定义好的可以用于format格式字符串说明
- 其它不常用的格式字符串
- 示例
import logging
LOG_FORMAT = "%(asctime)s %(name)s %(levelname)s %(pathname)s %(message)s "#配置输出日志格式
DATE_FORMAT = '%Y-%m-%d %H:%M:%S %a ' #配置输出时间的格式,注意月份和天数不要搞乱了
logging.basicConfig(level=logging.DEBUG,
format=LOG_FORMAT,
datefmt = DATE_FORMAT ,
filename="test.log" #有了filename参数就不会直接输出显示到控制台,而是直接写入文件
)
logging.debug("msg1")
logging.info("msg2")
logging.warning("msg3")
logging.error("msg4")
logging.critical("msg5")
- 输出结果
logging在scrapy中的使用
- 首先也是需要实例化,然后创建warning等级以上的日志示例
- spider文件截取代码
import logging # 日志
logger = logging.getLogger(__name__) # 实例化logger对象,让生成的日志可以清楚的现实日志来源地址
logger.warning(len(file_list)) # 实例化logger,生成warning等级的日志
- 在settings中设置日志等级和日志保存目录,部分代码
LOG_LEVEL = "WARNING" # 设置显示日志的等级,让输出画面更简洁
LOG_FILE = "./log.log" # 把日志保存在对应的目录文件中,注意:设置此项后终端将不会再显示内容
- 注意:在scrapy中setting关于logging模块的关键字
LOG_LEVEL
和LOG_FILE
不能自定义