zoukankan      html  css  js  c++  java
  • 日志模块

    一、日志的介绍

    1.1 日志与print的区别:

      print:灵活打印,移除困难

      loger:多种格式化方案,方便移除,方便输出到文本

    1.2 日志的级别 与 单例模式

     一、等级从低到高分为5个等级,默认的显示等级为warning

        1. debug        详细信息,通常在诊断问题时感兴趣
    2. info 确认事情的按期工作
    3. warning 表示意外的发生,或者在不久的将来将要出现的问题(如:磁盘不足)
    4. error 由于更严重的问题,程序无法执行
    5. critical 一个严重的错误,指示程序本身可能无法继续执行

    二、 loggin的默认显示等级
    logging 是一个单列模式,如果在日志显示之后再去配置显示等级,则无作用。
    只能在日志显示之前配置。
    logging.basicConfig(level=logging.ERROR)
    使用这个配置等级,包含这个等级与比等级高的日志

      

    # logging 的配置只能在最开始配置
    logging.basicConfig(level=logging.ERROR)
    logging.disable(logging.ERROR)
    
    logging.debug('1.基础调试信息')
    logging.disable(logging.CRITICAL)
    logging.info('2.输出信息')
    logging.warning('3.告警信息')
    logging.error('4.程序错误信息')
    logging.critical('5.严重告警信息')
    
    logging.basicConfig(level=logging.ERROR)
    # 在此处配置无效,还是从3开始显示 。因为是单列模式
    
    logging.debug('11.基础调试信息')
    logging.info('22.输出信息')
    logging.warning('33.告警信息')
    logging.error('44.程序错误信息')

    二、日志的配置

    2.1 日志的格式化配置

      单独使用的时候,使用logging.basicConfig这个函数

      使用logging.getloger这个对象的时候。使用 logging.Formatter来配置

      basicConfig 每个文件只配置一次,且放在最前面,重复配置只有第一条起作用
      具体的format配置选项在
      https://docs.python.org/3/library/logging.html#formatter-objects 中的LogRecord attributes
    import logging

    # 注意basciConfig 只能被写一次,多次配置,不是覆盖,只会第一条生效。
    # 如果第一条没配置就使用默认的,在日志显示之后再配置无效,因为是单列模式
    # 1. 修改显示格式 # logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG) # 2.添加时间 # logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s',level=logging.DEBUG) # 3. 添加文件,行号 # logging.basicConfig(level=logging.DEBUG, format='%(lineno)d - %(filename)s - %(asctime)s - %(name)s - %(levelname)s - %(message)s') # 4. 组合比较多 logging.basicConfig(level=logging.DEBUG, format='%(lineno)d - %(filename)s - %(asctime)s - %(name)s - %(levelname)s - %(message)s') de8ug = 'de8ug' logging.warning('%s python', de8ug) logging.debug('这一行跟着格式走') logging.info('这行也是') logging.warning('来吧') logging.debug('看下多复杂')

    2.2 封装成函数多次使用

    import logging
    import os
    import sys
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    """
    工程使用需求:
    1-不同日志名称
    2-打印同时在控制台,也有文件
    3-灵活控制等级
    """
    
    # 日志的控制开关,关闭最高级别的日志,就是关闭所有的
    # logging.disable(logging.CRITICAL)
    
    
    def lh_log(logger_name='LH-LOG', log_file='lh-log.log', level=logging.DEBUG):
        log_file = os.path.join(BASE_DIR, 'log', log_file)
    
        # 创建 logger对象
        logger = logging.getLogger(logger_name)
          if logger.hasHandlers():  # 如果已经存在hander就直接返回,在一个模块中重复引用,会造成重复答应
          return logger
        logger.setLevel(level)  # 添加等级
    
        # 创建控制台 console handler
        ch = logging.StreamHandler()
        ch.setLevel(level)
    
        # 创建文件 handler
        fh = logging.FileHandler(filename=log_file, encoding='utf-8')
    
        # 创建 formatter
        formatter = logging.Formatter('%(asctime)s %(filename)s [line:%(lineno)d] %(name)s %(levelname)s %(message)s')
    
        # 添加 formatter
        ch.setFormatter(formatter)
        fh.setFormatter(formatter)
    
        # 把 ch, fh 添加到 logger
        logger.addHandler(ch)
        logger.addHandler(fh)
    
        return logger
    
    
    def main():
        # 测试
        logger = lh_log()
        logger.debug('debug message')
        logger.info('info message')
        logger.warning('warn message')
        logger.error('error message')
        logger.critical('critical message')
    
    if __name__ == '__main__':
        main()
  • 相关阅读:
    学习笔记:字符串-Hash
    模板:高精度
    关于我自己
    学习笔记:数学-GCD与LCM-素数筛法
    学习笔记:数学-GCD与LCM-唯一分解定理(质因数分解)
    学习笔记:数学-GCD与LCM-整除的基础概念
    题解 洛谷P1990 覆盖墙壁
    学习笔记:平衡树-splay
    npm发布myself的插件
    javascript API文档
  • 原文地址:https://www.cnblogs.com/louhui/p/9126238.html
Copyright © 2011-2022 走看看