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

本文共 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

你可能感兴趣的文章
听说你叫Java(二)–Servlet请求
查看>>
vue脚手架vue-cli
查看>>
算法---两个栈实现一个队列
查看>>
redis学习笔记(三):列表、集合、有序集合
查看>>
TypeScript迭代器
查看>>
python学习笔记 - ThreadLocal
查看>>
基于组件的设计工作流与界面抽象
查看>>
案例分享〡三拾众筹持续交付开发流程支撑创新业务
查看>>
vagrant 添加本地 box 安装 laravel homestead
查看>>
Vim 折腾记
查看>>
eclipse(luna)创建web工程
查看>>
简洁Java之道
查看>>
QCon讲师对对碰——洪小军采访梁宇鹏:就是爱Golang
查看>>
Python数据可视化的10种技能
查看>>
Chef宣布100%开源,要走红帽模式?\n
查看>>
runC爆严重安全漏洞,主机可被攻击!使用容器的快打补丁
查看>>
回顾小程序2018年三足鼎立历程,2019年BAT火力全开
查看>>
原生Ajax
查看>>
LinkedIn 开源成功的秘密
查看>>
微软发布预览版SQL Server跨平台开发工具
查看>>