Python基础之logging模块知识总结

 更新时间:2021年05月19日 08:36:13   作者:_雪辉_  
用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么了,但是当我需要看大量的地方或者在一个文件中查看的时候,这时候print就不大方便了,所以Python引入了logging模块来记录我想要的信息,需要的朋友可以参考下

前言

logging模块是Python内置的标准模块,主要用于输出脚本运行日志,可以设置输出日志的等级、日志保存路径等。

  • 可以通过设置不同的日志等级,在 release 版本中只输出重要信息,而不显示大量的调试信息
  • logging 可以决定将信息输出位置和内容
  • logging 线程更安全

一、日志级别

级别排序:CRITICAL > ERROR > WARNING > INFO > DEBUG

  • debug : 打印全部日志,详细信息,通常只出现在诊断问题
  • info : 打印info,warning,error,critical级别的日志,正常输出
  • warning : 打印warning,error,critical级别的日志,部分异常,不影响程序
  • error : 打印error,critical级别的日志,影响程序部分功能
  • critical : 打印critical级别,影响程序运行
import logging  # 引入logging模块
# 将信息打印到控制台上
logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

[root@zijie ~]# python log.py
WARNING:root:warning
ERROR:root:error
CRITICAL:root:critical

默认生成的root logger的level是logging.WARNING,低于该级别不输出,如果要展示低于WARNING级别的内容,可以引入logging.basicConfig指定日志级别logging.basicConfig(level=logging.DEBUG)

二、basicConfig

格式 描述
filename 指定使用指定的文件名而不是 StreamHandler 创建 FileHandler。
filemode 如果指定 filename,则以此模式打开文件(‘r'、‘w'、‘a')。默认为“a”。
format 为处理程序使用指定的格式字符串。
datefmt 使用 time.strftime() 所接受的指定日期/时间格式。
style 如果指定了格式,则对格式字符串使用此样式。'%' 用于 printf 样式、'{' 用于 str.format()、'$' 用于 string。默认为“%”。
level 将根记录器级别设置为指定的级别。默认生成的 root logger 的 level 是 logging.WARNING,低于该级别的就不输出了。级别排序:CRITICAL > ERROR > WARNING > INFO > DEBUG。(如果需要显示所有级别的内容,可将 level=logging.NOTSET)
stream 使用指定的流初始化 StreamHandler。注意,此参数与 filename 不兼容——如果两者都存在,则会抛出 ValueError。
handlers 如果指定,这应该是已经创建的处理程序的迭代,以便添加到根日志程序中。任何没有格式化程序集的处理程序都将被分配给在此函数中创建的默认格式化程序。注意,此参数与 filename 或 stream 不兼容——如果两者都存在,则会抛出 ValueError。
import logging

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(filename)s %(levelname)s %(message)s',
                    datefmt='%a %d %b %Y %H:%M:%S',
                    filename='xuehui.log',
                    filemode='w')

logging.info('This is a info.')
logging.debug('This is a debug message.')
logging.warning('This is a warning.')

三、日志写文件

import logging
import os.path
import time

#创建logger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
# 创建handler,用于写入日志文件
logdate = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
log_path = 'logs/'
log_name = log_path + logdate + '.log'
logfile = log_name
fh = logging.FileHandler(logfile, mode='w')
fh.setLevel(logging.DEBUG)
# 定义输出格式
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
fh.setFormatter(formatter)
# 将logger添加到handler
logger.addHandler(fh)
# 日志
logger.debug('this is a logger debug message')
logger.info('this is a logger info message')
logger.warning('this is a logger warning message')
logger.error('this is a logger error message')
logger.critical('this is a logger critical message')

四、traceback记录

import logging
import os.path
import time

#创建logger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
# 创建handler,用于写入日志文件
logdate = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
log_path = 'logs/'
log_name = log_path + logdate + '.log'
logfile = log_name
fh = logging.FileHandler(logfile, mode='w')
fh.setLevel(logging.DEBUG)
# 定义输出格式
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
fh.setFormatter(formatter)
# 将logger添加到handler
logger.addHandler(fh)
# 日志
try:
    open('/data/exist', 'rb')
except BaseException as e:
    logger.error('Failed to open file', exc_info=True)

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

相关文章

  • LyScript获取上一条与下一条汇编指令的方法详解

    LyScript获取上一条与下一条汇编指令的方法详解

    LyScript 插件默认并没有提供上一条与下一条汇编指令的获取功能,当然你可以使用LyScriptTools工具包直接调用内置命令得到,本文就为大家详细讲讲如何实现
    2022-07-07
  • Python中list的交、并、差集获取方法示例

    Python中list的交、并、差集获取方法示例

    这篇文章主要介绍了Python中list的交、并、差集获取方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Pycharm下载pyinstaller报错:You should consider upgrading via the 'python -m pip install --upgrade pip' command的解决方法

    Pycharm下载pyinstaller报错:You should consider upgrading via

    这篇文章主要给大家介绍了关于Pycharm下载pyinstaller报错:You should consider upgrading via the 'python -m pip install --upgrade pip' command的解决方法,需要的朋友可以参考下
    2022-02-02
  • Python使用dis模块把Python反编译为字节码的用法详解

    Python使用dis模块把Python反编译为字节码的用法详解

    通常来说Python的性能或代码质量的评估可以通过dis模块获取到对应的字节码指令来进行评估,因而这里我们就来看一下Python使用dis模块把Python反编译为字节码的用法详解:
    2016-06-06
  • Python使用django获取用户IP地址的方法

    Python使用django获取用户IP地址的方法

    这篇文章主要介绍了Python使用django获取用户IP地址的方法,实例分析了django获取用户IP地址过程中出现的问题与对应的解决方法,非常简单实用,需要的朋友可以参考下
    2015-05-05
  • Python实现查找二叉搜索树第k大的节点功能示例

    Python实现查找二叉搜索树第k大的节点功能示例

    这篇文章主要介绍了Python实现查找二叉搜索树第k大的节点功能,结合实例形式分析了Python二叉搜索树的定义、查找、遍历等相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • python装饰器"@"使用实例深入探究

    python装饰器"@"使用实例深入探究

    这篇文章主要为大家介绍了python装饰器"@"使用实例深入探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • python中jieba模块的深入了解

    python中jieba模块的深入了解

    这篇文章主要介绍了python中jieba模块的深入了解,jieba模块是一个python第三方中文分词模块,可以用于将语句中的中文词语分离出来
    2022-06-06
  • VSCode设置Python语言自动格式化的详细方案

    VSCode设置Python语言自动格式化的详细方案

    VSCode Python自动格式化是指使用VSCode编辑器中的Python插件,可以自动对Python代码进行格式化,使其符合PEP 8规范,这篇文章主要给大家介绍了关于VSCode设置Python语言自动格式化的详细方案,需要的朋友可以参考下
    2023-07-07
  • Python竟能画这么漂亮的花,帅呆了(代码分享)

    Python竟能画这么漂亮的花,帅呆了(代码分享)

    这篇文章主要介绍了用Python作图的一个简单实例,通过turtle模块实现作图,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11

最新评论