Python模块之logging和colorlog

这篇具有很好参考价值的文章主要介绍了Python模块之logging和colorlog。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用logging和colorlog实现日志记录可以方便地记录程序的运行情况,方便调试和分析问题。下面将详细说明如何使用logging和colorlog,并提供相应的代码示例。

1. 安装colorlog模块

首先需要安装colorlog模块。可以通过pip命令进行安装:

pip install colorlog

2. logging模块介绍

logging模块是Python自带的日志记录模块。logging模块提供了非常灵活的日志记录方式,可以根据不同场景需求灵活配置,同时还支持多线程处理、远程日志收集等高级功能。

logging模块中有五个主要的类:

  • Loggers:提供应用程序可直接使用的接口。
  • Handlers:用于将日志记录发送到适当的目的地。例如文件、终端和网络等。
  • Filters:提供细粒度的日志过滤功能,可以基于任何的日志属性(例如日志级别、时间等)进行过滤。
  • Formatters:用于控制日志信息的输出格式。
  • Levels:提供日志的严重程度级别。

下面分别说明这些类及其方法和属性。

Loggers类

Loggers类是提供应用程序可直接使用的接口。通常我们在应用程序中通过logging.getLogger()方法获取一个logger对象,然后使用这个logger对象进行日志记录。

Loggers类的主要方法:

  • getLogger(name=None):获取一个logger对象,name为logger的名称,如果不传递name则使用root logger。
  • setLevel(level):设置logger对象的日志级别,只有高于等于这个级别的日志才会被输出。例如设置为logging.DEBUG,则logging.debug、logging.info、logging.warning、logging.error、logging.critical这五个级别的日志都会被输出。
  • addHandler(hdlr):向logger对象中添加一个handler,用于将日志输出到指定位置。
  • removeHandler(hdlr):从logger对象中删除指定的handler。
  • addFilter(filter):向logger对象中添加一个filter,用于对日志进行过滤。
  • removeFilter(filter):从logger对象中删除指定的filter。
  • debug(msg, *args, **kwargs):记录一条debug级别的日志。
  • info(msg, *args, **kwargs):记录一条info级别的日志。
  • warning(msg, *args, **kwargs):记录一条warning级别的日志。
  • error(msg, *args, **kwargs):记录一条error级别的日志。
  • critical(msg, *args, **kwargs):记录一条critical级别的日志。
  • log(level, msg, *args, **kwargs):记录指定级别的日志。
  • isEnabledFor(level):判断是否启用了指定级别的日志记录。

Loggers类的主要属性:

  • level:logger对象的日志级别。
  • handlers:logger对象中添加的handler列表。
  • filters:logger对象中添加的filter列表。

Handlers类

Handlers类用于将日志记录发送到适当的目的地。例如文件、终端和网络等。常用的handler有:

  • StreamHandler:将日志记录输出到终端。
  • FileHandler:将日志记录输出到文件。
  • RotatingFileHandler:将日志记录输出到滚动文件中。
  • SMTPHandler:将日志记录通过邮件发送出去。

Handlers类的主要方法:

  • setFormatter(fmt):设置handler对象的输出格式。
  • setLevel(level):设置handler对象的日志级别。
  • emit(record):将日志记录发送到handler指定的地方。
  • flush():清空handler内部缓存的日志记录。

Handlers类的主要属性:

  • formatter:handler对象的输出格式。
  • level:handler对象的日志级别。

Filters类

Filters类提供了细粒度的日志过滤功能,可以基于任何的日志属性(例如日志级别、时间等)进行过滤。

Filters类的主要方法:

  • filter(record):判断是否要处理指定的日志记录。

Formatters类

Formatters类用于控制日志信息的输出格式。常用的格式化符号有:

  • %(name)s:logger的名称。
  • %(levelno)s:日志级别的数字表示,如10、20、30、40、50。
  • %(levelname)s:日志级别的字符串表示,如DEBUG、INFO、WARNING、ERROR、CRITICAL。
  • %(pathname)s:调用日志记录函数所在的文件的完整路径名,例如/usr/local/www/python/debug.py。
  • %(filename)s:调用日志记录函数所在的文件名,例如debug.py。
  • %(funcName)s:调用日志记录函数的函数名,例如main。
  • %(lineno)d:调用日志记录函数所在的行号,例如33。
  • %(asctime)s:日志记录时间的字符串表示,例如“2019-01-01 12:00:00,000”。
  • %(thread)d:线程ID。
  • %(message)s:日志记录的信息。

Formatters类的主要方法:

  • format(record):将日志记录转换为要输出的格式化字符串。

3. colorlog模块介绍

colorlog是一个支持颜色输出的Python日志模块。colorlog是基于logging模块的,可以方便地与logging模块一起使用。colorlog可以按照不同的日志级别为不同的级别设置不同的颜色,方便快速定位问题。

colorlog主要有如下特点:

  • 支持多线程。
  • 支持Python 2.x和Python 3.x。
  • 日志信息输出到标准输出或文件。

4. 示例代码

下面是使用logging和colorlog模块记录日志的示例代码,包括写文件和不写文件两种格式。

import logging
import colorlog

def init_logger(logfile, loglevel):
    """初始化日志记录器

    Args:
        logfile: 日志文件名,不写入日志文件则传入None
        loglevel: 日志级别,可选值为debug、info、warning、error、critical

    Returns:
        logger: 返回初始化后的logger对象
    """
    # 创建logger对象
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.DEBUG)

    # 创建控制台输出handler
    console_handler = colorlog.StreamHandler()
    console_handler.setFormatter(colorlog.ColoredFormatter(
        '%(log_color)s[%(asctime)s %(levelname)s] %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S',
        log_colors={
            'DEBUG': 'cyan',
            'INFO': 'green',
            'WARNING': 'yellow',
            'ERROR': 'red',
            'CRITICAL': 'red,bg_white'
        }
    ))
    logger.addHandler(console_handler)

    if logfile:
        # 创建文件输出handler
        file_handler = logging.FileHandler(logfile, encoding='utf-8')
        file_handler.setLevel(logging.DEBUG)
        file_handler.setFormatter(logging.Formatter(
            '%(asctime)s [%(levelname)s] %(message)s',
            datefmt='%Y-%m-%d %H:%M:%S'
        ))
        logger.addHandler(file_handler)

    # 设置日志级别
    if loglevel == 'debug':
        logger.setLevel(logging.DEBUG)
    elif loglevel == 'info':
        logger.setLevel(logging.INFO)
    elif loglevel == 'warning':
        logger.setLevel(logging.WARNING)
    elif loglevel == 'error':
        logger.setLevel(logging.ERROR)
    elif loglevel == 'critical':
        logger.setLevel(logging.CRITICAL)

    return logger

if __name__ == '__main__':
    # 初始化日志记录器,不写文件
    logger = init_logger(None, 'debug')
    logger.debug('debug message')
    logger.info('info message')
    logger.warning('warning message')
    logger.error('error message')
    logger.critical('critical message')

    # 初始化日志记录器,写文件
    logger = init_logger('test.log', 'info')
    logger.debug('debug message')
    logger.info('info message')
    logger.warning('warning message')
    logger.error('error message')
    logger.critical('critical message')

上述代码中,init_logger()函数用于初始化日志记录器,并返回初始化好的logger对象。该函数接收两个参数:logfile和loglevel。如果logfile为None,则不写入日志文件;如果logfile为一个文件名,则将日志信息写入该文件中。loglevel为日志级别,文章来源地址https://www.toymoban.com/news/detail-682649.html

到了这里,关于Python模块之logging和colorlog的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python 常用内置模块之 logging(日志输出)

    Python logging 模块定义了为应用程序和库实现灵活的事件日志记录的函数和类,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP,Socket 等,甚至可以自定义实现具体的日志记录方式。 Logging 优点

    2024年02月05日
    浏览(45)
  • Python logging模块的基本使用、进阶使用详解

    在 python3 中,内置了 logging 模块,用于进行日志相关的处理。 这篇文章将总结 logging 模块的基本用法及进阶用法 1. 日志级别及对应函数 logging模块默认定义了6个日志级别: 日志优先级: CRIRICAL ERROR WARNING INFO DEBUG 当日志级别设置为某个级别时,则低于该级别的日志将不输出

    2024年01月25日
    浏览(46)
  • chatgpt赋能python:Python输出方法详解:从基础print()到高级logging模块

    在Python编程中,输出是一个必不可少的步骤。然而,Python提供了多种输出方法,如何选择最适合的方法呢?本文将详细介绍Python输出的不同方法,并给出实际应用场景的示例。 最基础的输出方法就是使用内置函数 print() 。它可以接收多个参数,并将它们以空格分隔输出到控制

    2024年02月08日
    浏览(52)
  • [python]使用标准库logging实现多进程安全的日志模块

    原本应用的日志是全部输出到os的stdout,也就是控制台输出。因其它团队要求也要保留日志文件,便于他们用其他工具统一采集,另一方面还要保留控制台输出,便于出问题的时候自己直接看pod日志。具体需求如下: 日志支持同时控制台输出和文件输出 控制台的输出级别可以

    2024年01月23日
    浏览(29)
  • Python logging.handlers模块,RotatingFileHandler、TimedRotatingFileHandler 处理器各参数详细介绍

    在python的 logging.handlers 模块中,提供了很多有用的日志处理程序对象,其中比较常用的有: RotatingFileHandler 、 TimedRotatingFileHandler 。这两个处理程序主要是用来对输出的日志文件进行切割。 RotatingFileHandler 是 Python 自带的日志处理器之一,用于将日志写入到指定的文件中,并控

    2024年02月09日
    浏览(37)
  • Python编程:标准库logging使用

    1.1 logging使用场景 ​ 日志是什么?这个不用多解释。百分之九十的程序都需要提供日志功能。Python内置的logging模块,为我们提供了现成的高效好用的日志解决方案。但是,不是所有的场景都需要使用logging模块,下面是Python官方推荐的使用方法: 任务场景 最佳工具 普通情况

    2024年02月08日
    浏览(24)
  • python创建多个logging日志文件

    为每一个计算过程创建一个单独的日志文件,并写入对应的结果,同时保留控制台输出的功能,控制台输出与日志文件记录可以分开单独控制。 控制台输出结果  日志文件输出

    2024年02月13日
    浏览(31)
  • 深入理解Python中的日志记录(Logging)

    🚀  个人主页 :xmp65535 🚀  专栏 :python技术专栏 目录 一、Python Logging 模块概述 二、相关组件 Logger Handler Formatter Filter LogRecord Level 三、基本配置 Formatters格式: 四、记录日志 五、日志记录者(Loggers) logging.getLogger(name=None) 六、处理器(Handlers) logging.Handler() RotatingFileHand

    2024年04月23日
    浏览(27)
  • Python实战 | 使用 Python 的日志库(logging)和 pandas 库对日志数据进行分析

    专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow专栏:https://blog.csdn.net/superdangbo/category_869

    2024年02月05日
    浏览(38)
  • Python - logging.Formatter 的常用格式字符串

    格式字符串 作用 %(name)s 日志记录器的名称(记录通道) %(levelno)s 日志记录级别的数字 DEBUG=10 、INFO=20 、WARNING=30 、ERROR=40 、CRITICAL=50 %(levelname)s 日志 记录级别的文本 “DEBUG” 、“INFO” 、“WARNING” 、“ERROR” 、“CRITICAL” %(pathname)s 日志调用的源文件的完整路径名 %(filename)s 日

    2023年04月13日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包