博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
再次改进日志类 --!
阅读量:6814 次
发布时间:2019-06-26

本文共 2800 字,大约阅读时间需要 9 分钟。

#!/usr/bin/env python# -*- coding: utf-8 -*-'''改进的日志类:1. 使用format对象,就不用自己采集环境信息,库可以采集信息2. 将多个handler绑定到一个logger上,且每个handler设置相应级别   日志会产生多份,每个handler只记录自己的级别和含高于自己级别的日志3. 还是需要inspect库采集环境信息,因为logging的API被封装过了,   format只能采集直接调用logging模块API的函数信息'''import osimport sysimport timeimport loggingimport inspecthandlers = {logging.NOTSET:"/tmp/TNLOG-notset.log",            logging.INFO:"/tmp/TNLOG-info.log",            logging.DEBUG:"/tmp/TNLOG-debug.log",            logging.WARNING:"/tmp/TNLOG-warning.log",            logging.ERROR:"/tmp/TNLOG-error.log",            logging.CRITICAL:"/tmp/TNLOG-critical.log"}def createHandlers():    logLevels = handlers.keys()    '''日志格式:[时间] [类型] [记录代码] 信息'''    fmt = '[%(asctime)s] [%(levelname)s] %(message)s '    formatter = logging.Formatter(fmt)    for level in logLevels:        path = os.path.abspath(handlers[level])        print path        handlers[level] = logging.FileHandler(path)        handlers[level].setLevel(level)        handlers[level].setFormatter(formatter) #加载模块时创建全局变量createHandlers()class TNLog(object):    '''TNLog.constant'''    NOTSET = logging.NOTSET    INFO = logging.INFO    DEBUG = logging.DEBUG    WARNING = logging.WARNING    ERROR = logging.ERROR    CRITICAL = logging.CRITICAL        def __init__(self,setLevel=logging.NOTSET):        self.__loggers = logging.getLogger()        logLevels = handlers.keys()        for level in logLevels:            self.__loggers.addHandler(handlers[level]) #将多个handler绑到一个logger上        self.__loggers.setLevel(setLevel)            def addCallingPointInfo(self,message):        frame,filename,lineNo,functionName,code,iUnknowField = inspect.stack()[2]        '''[文件名 - 行数 - 函数名] 信息'''        return "[%s - %s - %s] %s" %(filename,lineNo,functionName,message)        def info(self,message):        message = self.addCallingPointInfo(message)        self.__loggers.info(message)        def error(self,message):        message = self.addCallingPointInfo(message)        self.__loggers.error(message)        def warning(self,message):        message = self.addCallingPointInfo(message)        self.__loggers.warning(message)        def debug(self,message):        message = self.addCallingPointInfo(message)        self.__loggers.debug(message)        def critical(self,message):        message = self.addCallingPointInfo(message)        self.__loggers.critical(message)        #全局loggerlogger = TNLog(TNLog.DEBUG)def getLogger():    return loggerif __name__ == "__main__":    logger = getLogger()    logger.debug("debug")    logger = getLogger()    logger.info("info")    logger = getLogger()    logger.warning("warning")    logger = getLogger()    logger.error("error")    logger = getLogger()    logger.critical("critical")

转载于:https://www.cnblogs.com/code-style/archive/2012/10/17/2728075.html

你可能感兴趣的文章
C语言第三天,《常量指针和指针常量》
查看>>
linux系统中对SSD硬盘优化的方法
查看>>
BigPipe为什么可以节省时间?
查看>>
C# 特性(Attribute)学习
查看>>
构建VIM下的C++编程环境
查看>>
browserSync 工具
查看>>
一个随机排序集合的思考
查看>>
字符数组中查找字符串或字符数组
查看>>
JAVA自己理解的几种设计模式
查看>>
FFmpeg 常用命令收集
查看>>
安装 Scala
查看>>
蒙特卡罗(Monte Carlo)方法简介
查看>>
PIE SDK符号选择器
查看>>
python 爬虫
查看>>
【Mysql】使用子查询提高MySQL分页效率 limit(摘自网络)
查看>>
IDEA的Maven配置
查看>>
购物车
查看>>
读《大道至简》有感
查看>>
别人总结的一些drupal模块(1)
查看>>
第一篇博客 iframe自适应高度
查看>>