import logging
import sys
def setup_logger(name, logfile, level):
log_format = logging.Formatter('%(asctime)s %(levelname)s %(name)s %(filename)s:%(lineno)d [%(funcName)s]: '
'%(message)s', '%Y-%m-%d %H:%M:%S')
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
# output to the screen, print log if log level is higher than DEBUG
logstd = logging.StreamHandler()
logstd.setLevel(logging.DEBUG)
logstd.setFormatter(log_format)
logger.addHandler(logstd)
# output to the log file, write log to file if log level is higher than WARN
logfile = logging.FileHandler(logfile, mode='w+')
logfile.setFormatter(log_format)
logfile.setLevel(logging.WARN)
logger.addHandler(logfile)
# Handle stderr, let stdout operate as normal, in order for print() to work
class StreamToLogger(object):
''' Will just forward logs to the logger '''
def __init__(self, logger, log_level):
self.logger = logger
self.log_level = log_level
self.linebuf = ''
def write(self, buf):
''' Standard write function '''
for line in buf.rstrip().splitlines():
self.logger.log(self.log_level, line.rstrip())
def flush(self):
''' Standard flush function, nothing to do though '''
pass
sys.stderr = StreamToLogger(logger, logging.ERROR)
return logger
logger = setup_logger('rizhiwenjian', './file1.log', 'debug')
logger.info("hello a")