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()
  • 相关阅读:
    Oracle SQL语句收集
    SqlParameter In 查询
    SQL 性能优化
    Entity Framework
    【XLL API 函数】 xlfSetName
    【XLL API 函数】xlfUnregister (Form 2)
    【XLL API 函数】xlfUnregister (Form 1)
    【Excel 4.0 函数】REGISTER 的两种形式以及VBA等效语句
    【Excel 4.0 函数】REGISTER
    【Bochs 官方手册翻译】 第一章 Bochs介绍
  • 原文地址:https://www.cnblogs.com/louhui/p/9126238.html
Copyright © 2011-2022 走看看