• python的logging模块


    日志可以用来干什么?

    日志主要用来跟踪程序的运行状态。记录日志能够帮我们了解程序是否运行正常,程序出现问题时,也能够通过日志记录,快速定位到问题所在。

    一  logging模块定义了5种日志等级,依次从低到高:

    1. DEBUG:用于调试目的的底层系统信息
    2. INFO:普通系统信息
    3. WARNING:表示出现一个较小问题
    4. ERROR:表示出现一个错误问题
    5. CRITICAL:表示出现一个致命问题

    系统默认等级是WARNING,即低于WARNING等级的日志不会显示。

    比如:

    In [1]: import logging
    
    In [2]: logging.info("aaaa")
    
    In [3]: logging.warning("bbbb")
    WARNING:root:bbbb

    二  将日志记录到文件中

    一个简单例子:

    example_logging.py 文件的内容

    import logging
    
    logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)s %(pathname)s %(filename)s [line:%(lineno)s] %(levelname)s %(message)s',
                        filename='/tmp/test.log',
                        filemode='w')
    
    logging.debug("debug message")
    logging.info("info message")
    logging.warning("warning message")
    logging.error("error message")
    logging.critical("critical message")

    文件test.log的内容:

    2017-12-31 14:30:01,793 example_logging.py example_logging.py [line:8] DEBUG debug message
    2017-12-31 14:30:01,794 example_logging.py example_logging.py [line:9] INFO info message
    2017-12-31 14:30:01,794 example_logging.py example_logging.py [line:10] WARNING warning message
    2017-12-31 14:30:01,794 example_logging.py example_logging.py [line:11] ERROR error message
    2017-12-31 14:30:01,794 example_logging.py example_logging.py [line:12] CRITICAL critical message

    basciCofing的参数说明:

    level:设置日志等级

    format:日志输出格式:

      •  %(levelno)s: 打印日志级别的数值
      •  %(levelname)s: 打印日志级别名称
      •  %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
      • %(name)s: 打印当前程序的名称,包括前面的模块
      •  %(filename)s: 打印当前执行程序名
      •  %(module)s:filename名称部分,不包含后缀
      •  %(funcName)s: 打印日志的当前函数
      •  %(lineno)d: 打印日志的当前行号
      •  %(asctime)s: 打印日志的时间
      •  %(thread)d: 打印线程ID
      •  %(threadName)s: 打印线程名称
      •  %(process)d: 打印进程ID
      •  %(message)s: 打印日志信息

    filename:保存的文件名称

    filemode:文件打开模式

    三 日志的高级用法

    1. python日志系统是由4部分组成:
      1. logger:Logger 为日志系统的入口。每个logger命名都是bucket,你可以向这个bucket写入需要处理的消息,当一条消息传递给logger 时,消息的日志级别将与logger 的日志级别进行比较。如果消息的日志级别大于等于logger 的日志级别,该消息将会往下继续处理。如果小于,该消息将被忽略。
      2. Handler:Handler 决定如何处理logger 中的每条消息。它表示一个详细的日志行为,例如将消息写到屏幕上、写到文件中或者写到网络socket。与logger 一样,handler 也有一个日志级别。如果消息的日志级别小于handler 的级别,handler 将忽略该消息。
      3. Filter:Filter 用于对从logger 传递给handler 的日志记录进行额外的控制。
      4. Formatter:格式控制
    2. 基本流程
      1. 创建logger,设置logger的各个参数,日志级别、filter等
      2. 创建handler,给logger添加handler,分别处理logger中的信息,handler可以设置参数、日志级别,日志格式、filter等
    3. 简单例子(将日志结果输出到控制台)
    import logging
    
    # 创建 一个logger,级别为DEBUG
    logger = logging.getLogger('simple_example')
    logger.setLevel(logging.DEBUG)
    
    # 创建 一个 handler,用于处理控制台输出,处理级别为DEBUG
    ch = logging.StreamHandler()
    ch.setLevel(logging.DEBUG)
    
    # 设置输出格式
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
    # 给ch添加输出格式
    ch.setFormatter(formatter)
    
    # 将ch添加到logger上
    logger.addHandler(ch)
    
    logger.debug('debug message')
    logger.info('info message')
    logger.warn('warn message')
    logger.error('error message')
    logger.critical('critical message')

     运行结果

    $ python simple_logging_config.py
    2005-03-19 15:38:55,977 - simpleExample - DEBUG - debug message
    2005-03-19 15:38:55,979 - simpleExample - INFO - info message
    2005-03-19 15:38:56,054 - simpleExample - WARNING - warn message
    2005-03-19 15:38:56,055 - simpleExample - ERROR - error message
    2005-03-19 15:38:56,130 - simpleExample - CRITICAL - critical message

     四 其他

      1. logging是线程安全的吗?

       是线程安全的,但不是进程安全的

  • 相关阅读:
    RAD Studio最终版合集
    cxGrid 锁定一行,让该行数据不能编辑
    跨平台打开一个URL的方法
    【转】DELPHI开始支持LINUX DOCKER
    HTTP请求的拦截
    SVG图像
    Kafka
    HBase分布式集群部署
    HBase
    Mapreduce提交YARN集群运行
  • 原文地址:https://www.cnblogs.com/time-read/p/8157804.html
Copyright © 2020-2023  润新知