【Python自学笔记】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格式字符串

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_LEVELLOG_FILE不能自定义

参考文章

发布了47 篇原创文章 · 获赞 1 · 访问量 1182

猜你喜欢

转载自blog.csdn.net/xiaoqiangclub/article/details/104434302