• 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')
  • 相关阅读:
    “连城决”——预示2008年手机营销体式格式新打破
    都会演出连城诀—诺基亚N78决战入手入手了!
    Lyx:阔别单调的 LaTeX 节制命令
    [转载]Oracle 11g R1下的自动内存经管(2)
    假造化手艺是决胜企业IT化的关头
    请各位博友对HyperV的运用终了指摘
    有199元的Office,还要用盗版吗?
    十一回南通,当晚和同学去小石桥附近的网吧
    Windows 消息
    WinAPI: 钩子回调函数之 MsgFilterProc
  • 原文地址:https://www.cnblogs.com/sellsa/p/10078138.html
Copyright © 2020-2023  润新知