• python logger日志模块封装--避免日志重复打印


    1、format常用格式说明
    %(levelno)s: 打印日志级别的数值
    %(levelname)s: 打印日志级别名称
    %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
    %(filename)s: 打印当前执行程序名
    %(funcName)s: 打印日志的当前函数
    %(lineno)d: 打印日志的当前行号
    %(asctime)s: 打印日志的时间
    %(thread)d: 打印线程ID
    %(threadName)s: 打印线程名称
    %(process)d: 打印进程ID

    2.具体代码如下:

      

    import logging
    from logging import handlers
    import os
    
    class LoggerBasic(object):
    
        @classmethod
        def logger_basic(cls):
            logger = logging.getLogger(__name__)
            # 设置输出的等级
            LEVELS = {'NOSET': logging.NOTSET,
                      'DEBUG': logging.DEBUG,
                      'INFO': logging.INFO,
                      'WARNING': logging.WARNING,
                      'ERROR': logging.ERROR,
                      'CRITICAL': logging.CRITICAL}
            # 创建文件目录
            logs_dir = f"{os.path.dirname(os.path.dirname(__file__))}/log"
            file_name = 'ApiTestLogs'
            if os.path.exists(logs_dir) and os.path.isdir(logs_dir):
                pass
            else:
                os.mkdir(logs_dir)
            # 修改log保存位置
            # timestamp = time.strftime("%Y-%m-%d", time.localtime())
            logfilename = f'{file_name}.log'
            logfilepath = os.path.join(logs_dir, logfilename)
            # rotatingFileHandler = logging.handlers.RotatingFileHandler(filename=logfilepath,
            #                                                            maxBytes=1024 * 1024 * 50,
            #                                                            backupCount=5)
            rotatingFileHandler = logging.handlers.TimedRotatingFileHandler(filename=logfilepath,
                                                                            when='D',
                                                                            interval=30,
                                                                            encoding='utf-8')  # 按照时间进行切割.
    
            # 设置输出格式
            formatter = logging.Formatter('%(asctime)s -%(filename)s -%(levelname)s[line:%(lineno)d]: -%(message)s',
                                          '%Y-%m-%d %H:%M:%S %p')
            rotatingFileHandler.setFormatter(formatter)
           #加这一行if判断最为重要,如果不加的话,会重复打印日志
            if not logger.handlers:
                # 控制台句柄
                console = logging.StreamHandler()
                console.setLevel(logging.NOTSET)
                console.setFormatter(formatter)
                # 添加内容到日志句柄中
                logger.addHandler(rotatingFileHandler)
                logger.addHandler(console)
                logger.setLevel(LEVELS['INFO'])
    
    
            return logger

    解决日志重复打印来自于:https://www.cnblogs.com/kisun168/p/11912131.html

  • 相关阅读:
    在线程中进行读取并写入文件和wenjia
    Java里的IO流里的FileInputStream 的读取并在前打印行数!
    C++基础知识(前言)
    linux shell 笔记
    AngularJS图片上传功能的实现
    jQuery中事件绑定
    项目实践中--Git服务器的搭建与使用指南
    javascript跨浏览器事件对象类库
    完美运动框架(js)
    浅谈js中继承的理解和实现
  • 原文地址:https://www.cnblogs.com/zhuxibo/p/13952707.html
Copyright © 2020-2023  润新知