Python中的logging模块详解

 更新时间:2023年09月22日 09:29:51   作者:XWenXiang  
这篇文章主要介绍了Python中的logging模块详解,默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING,需要的朋友可以参考下

logging模块介绍

这个模块为应用与库实现了灵活的事件日志系统的函数与类

该模块定义的基础类和函数都列在下面。记录器暴露了应用程序代码直接使用的接口。

处理器将日志记录(由记录器创建)发送到适当的目标。过滤器提供了更细粒度的功能,用于确定要输出的日志记录。格式器指定最终输出中日志记录的样式。

日志级别

日志记录级别的数值在下表中给出

级别数值
CRITICAL50
ERROR40
WARNING30
INFO20
DEBUG10
NOTSET0

默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING 。

import logging
		logging.debug('debug message')
		logging.info('info message')
		logging.warning('warning message')
		logging.error('error message')
		logging.critical('critical message')

不需要打印,执行文件会得到以下结果:

WARNING:root:warning message
ERROR:root:error message
CRITICAL:root:critical message

模板

import logging
import logging.config
import os
# 定义日志输出格式 开始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
# 定义日志输出格式 结束
# 自定义文件路径
url = os.path.dirname(os.path.dirname(__file__))
url_a = os.path.join(url, 'log')
if not os.path.exists(url_a):
    os.mkdir(url_a)
logfile_path = os.path.join(url_a, 'log_a.log')
# log配置字典
LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': standard_format
        },
        'simple': {
            'format': simple_format
        },
    },
    'filters': {},  # 过滤日志
    'handlers': {
        #打印到终端的日志
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'simple'
        },
        #打印到文件的日志,收集info及以上的日志
        'default': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
            'formatter': 'standard',
            'filename': logfile_path,  # 日志文件路径
            'maxBytes': 1024*1024*5,  # 日志大小 5M
            'backupCount': 5,
            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },
    },
    'loggers': {
        #logging.getLogger(__name__)拿到的logger配置
        # '': {
        #     'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
        #     'level': 'DEBUG',
        #     'propagate': True,  # 向上(更高level的logger)传递
        # },  # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
        '注册记录': {
            'handlers': ['console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            'level': 'WARNING',
            'propagate': True,  # 向上(更高level的logger)传递
        },  # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
    },
}
# 使用日志字典配置
logging.config.dictConfig(LOGGING_DIC)  # 自动加载字典中的配置
# logger1 = logging.getLogger('转账记录')
logger2 = logging.getLogger('注册记录')
# logger1.debug('别忘点赞')
logger2.error('xxx转账100000¥')

logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:

  • filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
  • filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
  • format:指定handler使用的日志显示格式。
  • datefmt:指定日期时间格式。
  • level:设置rootlogger(后边会讲解具体概念)的日志级别
  • stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。

format参数中可能用到的格式化串:

  • %(name)s Logger的名字
  • %(levelno)s 数字形式的日志级别
  • %(levelname)s 文本形式的日志级别
  • %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
  • %(filename)s 调用日志输出函数的模块的文件名
  • %(module)s 调用日志输出函数的模块名
  • %(funcName)s 调用日志输出函数的函数名
  • %(lineno)d 调用日志输出函数的语句所在的代码行
  • %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
  • %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
  • %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
  • %(thread)d 线程ID。可能没有
  • %(threadName)s 线程名。可能没有
  • %(process)d 进程ID。可能没有
  • %(message)s用户输出的消息

到此这篇关于Python中的logging模块详解的文章就介绍到这了,更多相关Python的logging模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python绘制带有误差棒条形图的实现

    python绘制带有误差棒条形图的实现

    本文主要介绍了python绘制带有误差棒条形图的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Python中turtle作图示例

    Python中turtle作图示例

    这篇文章主要介绍了Python中turtle作图示例,分享了几则turtle作图的小实例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • python 求两个向量的顺时针夹角操作

    python 求两个向量的顺时针夹角操作

    这篇文章主要介绍了python 求两个向量的顺时针夹角操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • python实现简易数码时钟

    python实现简易数码时钟

    这篇文章主要为大家详细介绍了python实现简易数码时钟,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • mat矩阵和npy矩阵实现互相转换(python和matlab)

    mat矩阵和npy矩阵实现互相转换(python和matlab)

    这篇文章主要介绍了mat矩阵和npy矩阵实现互相转换(python和matlab),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 使用Python第三方库发送电子邮件的示例代码

    使用Python第三方库发送电子邮件的示例代码

    本文主要介绍了使用Python第三方库发送电子邮件的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Python使用Selenium模拟浏览器自动操作功能

    Python使用Selenium模拟浏览器自动操作功能

    这篇文章主要介绍了Python使用Selenium模拟浏览器自动操作功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • python下调用pytesseract识别某网站验证码的实现方法

    python下调用pytesseract识别某网站验证码的实现方法

    下面小编就为大家带来一篇python下调用pytesseract识别某网站验证码的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • python中的集合及集合常用的使用方法

    python中的集合及集合常用的使用方法

    这篇文章主要介绍了python中的集合及集合常用的使用方法,集合是一个无序的不重复元素序列,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • 简单谈谈Python中的反转字符串问题

    简单谈谈Python中的反转字符串问题

    本文给大家总结了5种可以实现python中反转字符串的方法,非常的实用,有需要的小伙伴可以参考下
    2016-10-10

最新评论