• 精简版logging


    # coding=utf-8
    import logging
    import time
    import os
    import logging.handlers
    import re
    
    
    def logger(schedule_name, console_print=True, logging_level=None,console_debug_level=logging.INFO):
        """
        :param schedule_name: the log scheduler  name 
        :param console_print: if True console print log ,False not .
        :param logging_level: file logging generate levels support: ["DEBUG","INFO","WARNING","ERROR"].
        :param console_debug_level: it can be str also ,for exp: console_debug_level="INFO",default set logging.INFO.
        :return: logging handlers
        """
        log_fmt = "[%(levelname)s]%(asctime)s line %(lineno)d :
    %(message)s"
        c_fmt = "[%(levelname)s]%(asctime)s %(filename)s.%(funcName)s():line %(lineno)d :
    %(message)s"
        date_format = "%Y-%m-%d %H:%M:%S %a"
        # 设置控制台输出level
        logging.basicConfig(level=console_debug_level,
                            format=c_fmt,
                            datefmt=date_format,
    
                            )
        levels = []
        if isinstance(logging_level, list):
            for  level in logging_level:
                if level in ["DEBUG","INFO","WARNING","ERROR"]:
                    levels.append(level)
            if levels:
                stamp = "dailylog.log"
                logsdir = os.path.join(os.getcwd(), "logs")
                if os.path.exists(logsdir):
                    for p in levels:
                        if os.path.exists(os.path.join(logsdir, p)):
                            pass
                        else:
                            os.mkdir(os.path.join(logsdir, p))
                else:
                    os.mkdir(logsdir)
                    for p in levels:
                        os.mkdir(os.path.join(logsdir, p))
    
                logging_level_path = {}
                for i in levels:
                    filename = os.path.join(logsdir, i, stamp)
                    logging_level_path[i] = filename
                logger = logging.getLogger(schedule_name)
                print(logging_level_path)
                for k, v in logging_level_path.items():
                    handler = logging.handlers.TimedRotatingFileHandler(filename=v, when='MIDNIGHT', interval=1,
                                                                        backupCount=4,encoding="utf-8")
                    handler.suffix = "%Y-%m-%d.log"
                    handler.extMatch = r"^d{4}-d{2}-d{2}.log$"
                    handler.extMatch = re.compile(handler.extMatch)
                    h_fmt = logging.Formatter(log_fmt)
                    handler.setFormatter(h_fmt)
                    if k in ["DEBUG","INFO","WARNING","ERROR"]:
                       handler.setLevel(k)
                    logger.addHandler(handler)
                logger.propagate = console_print
                return logger
            else:
                raise TypeError('logging_level support in:["DEBUG","INFO","WARNING","ERROR"]')
        else:
            raise NameError("logging_level expect list but get %s"%(type(logging_level).__name__))
    

      .

  • 相关阅读:
    Visual Studio 2013 的 Xamarin 安装教程
    BeesCMS后台登录SQL报错注入
    Linux系统更改IP地址
    SSRF漏洞
    代码执行漏洞
    Python零碎的知识(持续更新)
    iptables
    WAF学习_(2)安装
    WAF学习_(1)Lua基础
    SSL协议
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/11823729.html
Copyright © 2020-2023  润新知