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