python日志

发布时间:2019-08-09 10:34:13编辑:auto阅读(1713)

    log4py.py日志重构类
    import datetime  
    import sys  
    import traceback  
    import codecs  
    import types  
    import logging
    import os
    import time 
    #log编码全部按utf8处理  
    loglevels = {'stdout':['info','debug','warn','error','fatal'],  
        'file':['info','debug','warn','error','fatal']  
        }  
    #print os.getcwd()+'/logs/logs.txt' 
    logfile = os.getcwd()+'/logs/logs.'+time.strftime('%Y-%m-%d',time.localtime(time.time()))+'.txt'  
    class log4py():  
        def __init__(self,modulename="gloabal"):  
            self.filename = logfile  
            #self.flag = set(loglevel['stdout']+loglevel['file'])  
            self.loglevel = loglevels  
            self.modulename = modulename  
            self.fcname = None  
        class function():  
            def __init__(self,fcname,parent):  
                parent.debug('enter ',fcname)  
                self.fcname = fcname  
                self.parent = parent  
            def __del__(self):  
                self.parent.debug('exit ',self.fcname)  
        def dbgfc(self,fcname):  
            '''''set debug function name'''  
            f = None  
            if 'debug' in self.flag:  
                f = self.function(fcname,self)  
            return f  
        def _gettime(self):  
            return datetime.datetime.now().isoformat()  
        def outstd(self,*fmt):  
            s = self.fmtstr(*fmt)  
            print s  
        def outfile(self,*fmt):  
            s = self.fmtstr(*fmt)  
            #print 'before outfile '+s  
            if s:  
                #print 'outfile '+s  
                encoding = 'utf8'  
                out = open(logfile, 'a+')#, encoding  
                out.write(s)  
                out.write('\n')  
                out.close()  
        def fmtstr(self, *fmt):  
            str = ''  
            encoding = 'utf8'#缺省utf8编码  
            for i in fmt:  
                if not type(i) in [types.UnicodeType, types.StringTypes, types.StringType]:  
                    s= repr(i)  
                else:  
                    s = i  
                if type(s) == type(u''):  
                    str += s.encode(encoding)  
                else:  
                    str += s  
                str += '.'  
            #str += '/n'  
            #print 'fmtstr:'+str  
            return str  
        def debug(self,*fmt):  
            if 'debug' in self.loglevel['stdout']:  
                self.outstd(self._gettime(),'[DEBUG]',self.modulename,*fmt)  
            if 'debug' in self.loglevel['file']:  
                #print 'debug file ...'  
                self.outfile(self._gettime(),'[DEBUG]',self.modulename,*fmt)  
        def warn(self,*fmt):  
            if 'warn' in self.loglevel['stdout']:  
                self.outstd(self._gettime(),'[WARN]',self.modulename,*fmt)  
            if 'warn' in self.loglevel['file']:  
                self.outfile(self._gettime(),'[WARN]',self.modulename,*fmt)  
        def info(self,*fmt):  
            if 'info' in self.loglevel['stdout']:  
                self.outstd(self._gettime(),'[INFO]',self.modulename,*fmt)  
            if 'info' in self.loglevel['file']:  
                self.outfile(self._gettime(),'[INFO]',self.modulename,*fmt)  
        def error(self,*fmt):  
            #print '/033[0;30;41m',  
            if 'error' in self.loglevel['stdout']:  
                self.outstd(self._gettime(),'[ERROR]',self.modulename,*fmt)  
            if 'error' in self.loglevel['file']:  
                self.outfile(self._gettime(),'[ERROR]',self.modulename,*fmt)  
            #print '/033[0m'  
        def fatal(self,*fmt):  
            if 'fatal' in self.loglevel['stdout']:  
                self.outstd(self._gettime(),'[FATAL',self.modulename,*fmt)  
            if 'fatal' in self.loglevel['file']:  
                self.outfile(self._gettime(),'[FATAL',self.modulename,*fmt)  
    #unit test  
    if __name__ == '__main__':  
        log=log4py()  
        log.outstd('INFO','stdout','test')  
        log.outfile('INFO','stdout','test')  
        log.debug('debug information 调试')  
        log.error('errorrrrrrrrrrrrrrr')  
        log.debug('hello')


    用法:

    from log4py import log4py
    log=log4py('所在的python文件')
    log.debug("aaaaa")



关键字