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")