zoukankan      html  css  js  c++  java
  • 将不同级别的logging 日志信息写入不同文件

    将不同级别的logging 日志信息写入不同文件

    # -*- coding: utf-8 -*-
    import os
    import time
    from logging.handlers import RotatingFileHandler
    import logging
    
    import inspect
    
    dir = os.path.dirname(__file__)
    
    handlers = {logging.NOTSET: os.path.join(dir, 'notset.log'),
    
                logging.DEBUG: os.path.join(dir, 'debug.log'),
    
                logging.INFO: os.path.join(dir, 'info.log'),
    
                logging.WARNING: os.path.join(dir, 'warning.log'),
    
                logging.ERROR: os.path.join(dir, 'error.log'),
    
                logging.CRITICAL: os.path.join(dir, 'critical.log'),
                }
    
    
    def createHandlers():
        logLevels = handlers.keys()
    
        for level in logLevels:
            path = os.path.abspath(handlers[level])
            handlers[level] = RotatingFileHandler(path, maxBytes=10000, backupCount=2, encoding='utf-8')
    
    
    # 加载模块时创建全局变量
    
    createHandlers()
    
    
    class TNLog(object):
    
        def printfNow(self):
            return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
    
        def __init__(self, level=logging.NOTSET):
            self.__loggers = {}
    
            logLevels = handlers.keys()
    
            for level in logLevels:
                logger = logging.getLogger(str(level))
    
                # 如果不指定level,获得的handler似乎是同一个handler?
    
                logger.addHandler(handlers[level])
    
                logger.setLevel(level)
    
                self.__loggers.update({level: logger})
    
        def getLogMessage(self, level, message):
            frame, filename, lineNo, functionName, code, unknowField = inspect.stack()[2]
    
            '''日志格式:[时间] [类型] [记录代码] 信息'''
    
            return "[%s] [%s] [%s - %s - %s] %s" % (self.printfNow(), level, filename, lineNo, functionName, message)
    
        def info(self, message):
            message = self.getLogMessage("info", message)
    
            self.__loggers[logging.INFO].info(message)
    
        def error(self, message):
            message = self.getLogMessage("error", message)
    
            self.__loggers[logging.ERROR].error(message)
    
        def warning(self, message):
            message = self.getLogMessage("warning", message)
    
            self.__loggers[logging.WARNING].warning(message)
    
        def debug(self, message):
            message = self.getLogMessage("debug", message)
    
            self.__loggers[logging.DEBUG].debug(message)
    
        def critical(self, message):
            message = self.getLogMessage("critical", message)
    
            self.__loggers[logging.CRITICAL].critical(message)
    
    
    if __name__ == "__main__":
        logger = TNLog()
    
        logger.debug("debug")
        logger.info("info")
        logger.warning("warning")
        logger.error("error")
        logger.critical("critical")

  • 相关阅读:
    121.买卖股票 求最大收益1 Best Time to Buy and Sell Stock
    409.求最长回文串的长度 LongestPalindrome
    202.快乐数 Happy Number
    459.(KMP)求字符串是否由模式重复构成 Repeated Substring Pattern
    326.是否为3的平方根 IsPowerOfThree
    231.是否为2的平方根 IsPowerOfTwo
    461.求两个数字转成二进制后的“汉明距离” Hamming Distance
    206.反转单链表 Reverse Linked List
    448. 数组中缺少的元素 Find All Numbers Disappeared in an Array
    常见表单元素处理
  • 原文地址:https://www.cnblogs.com/huchong/p/9304955.html
Copyright © 2011-2022 走看看