zoukankan      html  css  js  c++  java
  • logging记录日志

    日志是一个系统的重要组成部分,用以记录用户操作系统运行状态错误信息。日志记录的好坏直接关系到系统出现问题时定位的速度。logging模块Python2.3版本开始成为Python标准库的一部分。

    日志级别

    在最简单的使用中,我们直接导入logging模块,然后调用它的debuginfowarnerrorcritical等函数记录日志。默认情况下,logging模块将日志打印到屏幕终端,日志级别为WARNNING,也就是说日志级别大于等于WARNING的日志才会被显示

    #!/usr/bin/python3
    import logging
    
    logging.debug('debug message')
    logging.info('info message')
    logging.warn('warn message')
    logging.error('error.message')
    logging.critical('critical.message')
    default_logging.py

    程序执行结果如下:

    $ python3 default_logging.py 
    WARNING:root:warn message
    ERROR:root:error.message
    CRITICAL:root:critical.message

    日志级别是一个逻辑上的概念,用来区分日志的重要程度。将日志分为不停级别的日志后,一方面可以在大多数时间只保存级别比较高的日志来提高性能;领一方面也便于日志的分析。例如,从一个超大的日志文件中,快速找出几条错误信息。

    在python的logging模块中,日志分为5个级别:

    日志级别 权重 含义
    CAITICAL 50 严重错误,表名软件已不能继续运行了
    ERROR 40 发生严重的错误,必须马上处理
    WARNING 30 应用程序可以容忍这些信息,软件还是在正常工作,不过它们应该被检查及修复,否则将在不久的将来发生问题
    INFO 20 证明事情按预期工作,突出强调应用程序的运行过程
    DEBUG 10 详细信息,只有开发人员调试程序时才需要关注的事情

    配置日志格式

    在使用logging记录日志之前,我们可以进行一些简单的配置,如下:

    #!/usr/bin/python3
    import logging
    
    logging.basicConfig(filename='app.log', level=logging.INFO)
    
    logging.debug('debug message')
    logging.info('info message')
    logging.warn('warn message')
    logging.error('error.message')
    logging.critical('critical.message')

    执行上面的程序,会在当前目录下产生一个app.log文件。该文件中存在INFO及INFO以上级别的日志记录。

    上面我们通过basicConfig方法对日志进行了简单的配置,我们也可以进行更加复杂的日志配置。在这之前先了解logging模块中的几个概念:

    • Logger:日志记录器,是应用程序中能直接使用的接口
    • Handler: 日志处理器,用以表名将日志保存到什么地方以及保存多久
    • Formatter: 格式化,用以配置日志的输出格式

    在典型的使用场景中,一个日志记录器使用一个日志处理器,一个日志处理器使用一个日志格式化

    python的logging模块提供给你了多种方式来配置日志。对于比较简单的脚本,可以直接使用basicConfig在代码中配置日志对于比较复杂的项目,可以将日志的配置保存在一个配置文件中,然后在代码中使用fileConfig函数读取配置文件。

    源码中配置日志示例

    在这个例子中,日志文件会保存所有DEBUG级别及以上级别的日志。每一条日志包含了打印日志的时间,日志的级别和日志的内容

    #!/usr/bin/python3
    import logging
    
    logging.basicConfig(
        filename='app.log',
        level=logging.DEBUG,
        format='%(asctime)s : %(levelname)s : %(message)s')
    
    logging.debug('debug message')
    logging.info('info message')
    logging.warn('warn message')
    logging.error('error.message')
    logging.critical('critical.message')

    典型的日志配置文件示例

    对于复杂的项目,一般将日志配置保存到配置文件中。如下:logging.cnf

    #首先在[loggers]声明一个名为root的logger
    [loggers]
    keys = root
    
    #在[handlers]中声明一个名为logfile的handler
    [handlers]
    keys = logfile
    
    #在[formatters]中声明一个名为generic的formatter
    [formatters]
    keys = generic
    
    #在[logger_root]中定义root这个logger所使用的handler
    [logger_root]
    handlers = logfile
    
    #在[handler_logfile]中定义handler输出日志方式、日志文件的切换时间等
    [handler_logfile]
    class = handlers.TimedRotatingFileHandler
    args = ('app.log',)
    level = DEBUG
    format = generic
    
    #[在formatter_generic]中定义了日志的格式,包括日志产生的时间、日志级别、产生日志的文件名和行号等信息
    [formatter_generic]
    format = '%(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s] %(message)s'

    python代码中使用logging.config模块的fileConfig函数加载日志配置

    #!/usr/bin/python3
    import logging
    import logging.config
    
    logging.config.fileConfig('logging.cnf')
    
    logging.debug('debug message')
    logging.info('info message')
    logging.warn('warn message')
    logging.error('error.message')
    logging.critical('critical.message')
  • 相关阅读:
    [LeetCode] Power of Three 判断3的次方数
    [LeetCode] 322. Coin Change 硬币找零
    [LeetCode] 321. Create Maximum Number 创建最大数
    ITK 3.20.1 VS2010 Configuration 配置
    VTK 5.10.1 VS2010 Configuration 配置
    FLTK 1.3.3 MinGW 4.9.1 Configuration 配置
    FLTK 1.1.10 VS2010 Configuration 配置
    Inheritance, Association, Aggregation, and Composition 类的继承,关联,聚合和组合的区别
    [LeetCode] Bulb Switcher 灯泡开关
    [LeetCode] Maximum Product of Word Lengths 单词长度的最大积
  • 原文地址:https://www.cnblogs.com/sellsa/p/10078138.html
Copyright © 2011-2022 走看看