python module -- mylog
'''
logger:
save log to file and print to console
from mylog import mylog
from mylog import debug
from mylog import info
from mylog import error
from mylog import initlog
from mylog import destory
logger = initlog(tag, fname)
setlogger(logger) #for mythread debug
destory()
'''
import logging
import sys
import time
logger = None
def wtime(format = '%m-%d %H:%M:%S'):
return time.strftime(format, time.localtime(time.time()))
class mylog:
DEBUG = logging.DEBUG
INFO = logging.INFO
def __init__(self, name):
self.fmt = '%(asctime)s %(levelname)s %(name)-4s: %(message)s'
self.formatter = logging.Formatter(self.fmt)
self.logger = logging.getLogger(name)
self.logger.setLevel(logging.DEBUG)
self.handlers = []
def setfmt(self, fmt):
self.formatter = logging.Formatter(fmt)
def setname(self, name):
self.logger = logging.getLogger(name)
self.name = name
def createfile(self, fname):
if fname is None:
return None
file_handler = logging.FileHandler(fname + wtime(format = '%m-%d-%H-%M-%S') + ".log")
file_handler.setFormatter(self.formatter)
file_handler.setLevel(logging.DEBUG)
self.logger.addHandler(file_handler)
self.handlers.append(file_handler)
return file_handler
def createconsole(self):
console_handler = logging.StreamHandler(sys.stdout)
console_handler.formatter = self.formatter
console_handler.setLevel(logging.INFO)
self.logger.addHandler(console_handler)
self.handlers.append(console_handler)
return console_handler
def destory(self):
for handler in self.handlers:
try:
self.logger.removeHandler(handler)
except:
print 'removeHandler failed :'
print sys.exc_info()
self.logger = None
def getlogger(self):
return self.logger
def debug(self, msg):
if self.logger : self.logger.debug(msg)
else : print msg
def info(self, msg):
if self.logger : self.logger.info(msg)
else : print msg
def error(self, msg):
if self.logger : self.logger.error(msg)
else : print msg
def initlog(tag, fname):
global logger
logger = mylog(tag)
logger.createfile(fname).setLevel(logger.DEBUG)
logger.createconsole().setLevel(logger.INFO)
return logger
def debug(msg):
global logger
if logger is None:
initlog('mylog', 'mylog_')
logger.debug(msg)
def info(msg):
global logger
if logger is None:
initlog('mylog', 'mylog_')
logger.info(msg)
def error(msg):
global logger
if logger is None:
initlog('mylog', 'mylog_')
logger.error(msg)
def destory():
global logger
if logger is None: return
logger.destory()
logger = None