Python日志logging封装

  • 分类: Python
  • 发表日期:2021-07-30 15:18:00
  • 最后修改:2021-10-21 16:21:00
import os
import re
import time
import logging
import logging.handlers

logging.getLogger("requests").setLevel(logging.WARNING)
logging.getLogger("elasticsearch").setLevel(logging.WARNING)

class Logs(object):
    def __init__(self, logger_name=__name__, logs_dir=None, file_name=None, *args, **kwargs):
        self.logger = logging.getLogger(logger_name)
        self.logger_level = 'INFO' if 'logger_level' not in kwargs else kwargs['logger_level']
        self.console_handler_level = 'ERROR' if 'console_handler_level' not in kwargs else kwargs['console_handler_level'] 
        self.file_handler_level = 'INFO' if 'file_handler_level' not in kwargs else kwargs['file_handler_level']

        # 设置输出的等级
        LEVELS = {'NOTSET': logging.NOTSET,
                  'DEBUG': logging.DEBUG,
                  'INFO': logging.INFO,
                  'WARNING': logging.WARNING,
                  'ERROR': logging.ERROR,
                  'CRITICAL': logging.CRITICAL}

        # 创建文件目录
        if not logs_dir:
            logs_dir= os.path.dirname(os.path.abspath(__file__)) + os.path.sep + "logs"
            
        if os.path.exists(logs_dir) and os.path.isdir(logs_dir):
            pass
        else:
            os.makedirs(logs_dir)

        timestamp = time.strftime("%Y-%m-%d", time.localtime())
        
        if file_name:
            log_file_name = f'{file_name}_{timestamp}.log'
        else:
            log_file_name = f"{timestamp}.log"

        log_file_path=os.path.join(logs_dir, log_file_name)
        rotating_fileHandler = logging.handlers.TimedRotatingFileHandler(
            filename=log_file_path, when="D", interval=1, backupCount=1, encoding="utf-8"
        )
        rotating_fileHandler.suffix = "%Y-%m-%d.log"
        rotating_fileHandler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}.log$")

        # rotating_fileHandler = logging.handlers.RotatingFileHandler(filename=log_file_path,
        #                                                            maxBytes=1024 * 1024 * 50,
        #                                                            backupCount=5,
        #                                                            encoding="utf8")
        # 设置输出格式
        formatter = logging.Formatter("[%(asctime)s] [%(levelname)s] %(message)s", "%Y-%m-%d %H:%M:%S")
        rotating_fileHandler.setLevel(LEVELS[self.file_handler_level])
        rotating_fileHandler.setFormatter(formatter)
        # 控制台句柄
        console_handler = logging.StreamHandler()
        console_handler.setLevel(LEVELS[self.console_handler_level])
        console_handler.setFormatter(formatter)
        # 添加内容到日志句柄中
        self.logger.addHandler(rotating_fileHandler)
        self.logger.addHandler(console_handler)
        self.logger.setLevel(LEVELS[self.logger_level])
    
    # @property
    # def get_logger(self):
    #     return self.logger

    # def debug(self, message):
    #     self.logger.debug(message)
        
    # def info(self, message):
    #     self.logger.info(message)
 
    # def warning(self, message):
    #     self.logger.warning(message)
 
    # def error(self, message):
    #     self.logger.error(message)


if __name__ == '__main__':
    pass

 

post
2021年7月9日 09:40 原创 草稿

针对情报平台的多种 es dsl 测试

post
2021年7月13日 09:36 原创
post
2021年7月30日 12:01 原创
post
2021年7月30日 12:15 原创
post
2021年7月30日 15:07 原创
post
2021年7月30日 15:13 原创
post
2021年7月30日 15:24 原创
post
2021年7月30日 16:09 原创
post
2021年7月30日 16:02 原创
post
2021年8月16日 15:28 原创
post
2021年8月16日 20:01
post
2021年8月17日 12:07 原创
post
2021年8月31日 15:42 原创
post
2021年10月8日 16:17
post
2021年10月13日 11:43
post
2021年10月21日 15:47 原创
post
2021年10月25日 11:27
post
2023年8月18日 20:39 原创 未公开

本博客部署教程

post
2024年7月4日 08:54 原创

0 评论

大哥整点话呗~