• python日志记录库logging介绍


    官网Logging HOWTO

    Basic Logging Tutorial

    Logging日志记录用于追踪软件运行过程中触发的事件。开发人员志将logging calls添加到代码中以指示某件事发生了。事件由消息描述,该消息可以包含一些可变数据(如事件每次出现可能产生不同的数据)。事件有各自的重要性,称为level or severity

    When to use logging

    Logging为简单的日志记录提供了一些方法可直接调用,debug(), info(), warning(), error(), critical()。可以使用logging的情况见下表

    tasktool
    普通命令或程序输出到控制台print()
    报告程序正常运行过程中触发的事件(状态监测或过失调查logging.info()logging.debug()详细的诊断)
    警告运行时出现的指定事件warnings.warn():在库代码中,如果问题是可以避免的,并且应修改客户端应用程序以消除警告。logging.warning():如果客户端应用程序无法对这种情况执行任何操作,但仍应注意该事件
    报道运行时出现的指定错误引发异常exception
    报告抑制错误而不引发异常(例如,长时间运行的服务器进程中的错误处理程序)logging.error(), logging.exception() or logging.critical()适用于特定错误和应用程序领域

    logging函数按照它们被使用来追踪的事件level or severity命名,标准水平及其适用性如下(按严重程度的增加顺序)

    LevelWhen it’s used
    DEBUG详细信息,通常仅在诊断问题时才有意义
    INFO确认事情正在按预期进行
    WARNING迹象表明发生了意想不到的事情,或表明在不久的将来出现了一些问题(如磁盘空间低),程序仍在正常工作
    ERROR由于更严重的问题,该软件无法执行某些功能
    CRITICAL一个严重的错误,表明程序本身可能无法继续运行

    默认是WARNING,表明只有这个级别及以上的事件才会被跟踪,除非修改日志包配置
    跟踪的事件可以以不同的方式处理。处理跟踪事件的最简单方法是将它们打印到控制台。另一种常见的方法是将它们写入磁盘文件

    A simple example

    >>>import logging
    >>>logging.warning('watch out')  # 输出信息到控制台
    WARNING:root:watch out
    >>>logging.info('told you')  # 不会打印出任何信息
    

    INFO信息没有输出是因为它的级别低于WARNING,输出信息包括指示级别WARNING和描述watch out。输出格式也可以修改。

    Logging to a file

    一个常见的情况是在文件中记录logging事件

    import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('this message should go to the log file')
    logging.info('so should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    '
    运行

    运行上面代码生成文件example.log,内容如下

    DEBUG:root:this message should go to the log file
    INFO:root:so should this
    WARNING:root:And this, too
    ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
    

    设置的levelDEBUG,因此所有信息都输出
    每次运行都会添加信息到文件中,如果想只记录最新的信息,使用filemode参数

    logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
    

    Logging from multiple modules

    如果你的程序包含多个模块,可以相互调用myapp.py调用mylib.py,信息全都输出在myapp.log

    # mylib.py
    import logging
    def do_something():
        logging.info('do something')
    '
    运行
    # myapp.py
    import mylib
    import logging
    def main():
        logging.basicConfig(filename='myapp.log', level=logging.INFO)
        logging.info('start')
        mylib.do_something()
        logging.info('finish')
    if __name__ == '__main__':
        main()
    
    INFO:root:start
    INFO:root:do something
    INFO:root:finish
    

    Logging variable data

    要记录变量数据,使用事件描述消息的格式字符串,并将变量数据附加为参数。

    import logging
    logging.warning('%s before you %s', 'look', 'leap!')
    '
    运行
    WARNING:root:look before you leap!
    

    此处的格式使用的旧%风格,最新的格式也支持,参考 Using particular formatting styles throughout your application

    Changing the format of displayed messages

    要更改用于显示消息的格式,需要指定要使用的格式

    import logging
    logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)
    logging.debug('This message should appear on the console')
    logging.info('So should this')
    logging.warning('And this, too')
    '
    运行
    DEBUG:This message should appear on the console
    INFO:So should this
    WARNING:And this, too
    

    此处的root消失

    Displaying the date/time in messages

    要显示事件的日期和时间,在格式字符串中放置%(asctime)

    import logging
    logging.basicConfig(format='%(asctime)s %(message)s')
    logging.warning('is when this event was logged.')
    '
    运行
    2022-09-20 14:49:48,927 is when this event was logged.
    

    修改日期格式,传入参数datefmt

    import logging
    logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
    logging.warning('is when this event was logged.')
    '
    运行
    09/20/2022 02:50:34 PM is when this event was logged.
    

    以上是基础的logging教程,对于简单的使用和运行是足够的,如果需要更高级的教程参考Logging Cookbook

  • 相关阅读:
    NX二次开发-挂菜单栏.men和工具条.rtb及菜单中文汉字乱码问题
    MFC|按钮的自绘
    数据库表的操作
    Devkit代码迁移工具——smartdenovo源码迁移
    Qwt QwtLegend和QwtPlotLegendItem图例类详解
    XAF新手入门 - 类型子系统(Types Info Subsystem)
    Learning Transferable Features with Deep Adaptation Networks
    CSS必学:元素之间的空白与行内块的幽灵空白问题
    RabbitMQ高级知识点
    基于STM32的物联网下智能化养鱼鱼缸控制控制系统
  • 原文地址:https://blog.csdn.net/weixin_45526117/article/details/126943685