blob: 7011cefb804458567fdee979c5474e8bdb0313dc [file] [log] [blame]
# -*- coding: utf-8 -*-
"""
Created on 2012-6-12
@author: cheng.tang
"""
import logging
import time
import logging.handlers
class _LogFormatter(logging.Formatter):
def __init__(self, *args, **kwargs):
logging.Formatter.__init__(self, *args, **kwargs)
def format(self, record):
try:
record.message = record.getMessage()
except Exception, e:
record.message = "Bad message (%r): %r" % (e, record.__dict__)
#record.asctime = time.strftime(
# "%y%m%d %H:%M:%S", self.converter(record.created))
record.asctime = time.strftime(
"%m%d %H:%M:%S", self.converter(record.created))
#prefix = '[%(levelname)1.1s %(asctime)s %(module)s:%(lineno)d]' % \
# record.__dict__
prefix = '[%(levelname)1.1s %(asctime)s]' % record.__dict__
formatted = prefix + " " + record.message
if record.exc_info:
if not record.exc_text:
record.exc_text = self.formatException(record.exc_info)
if record.exc_text:
formatted = formatted.rstrip() + "\n" + record.exc_text
return formatted.replace("\n", "\n ")
def _enable_pretty_logging(**kwargs):
"""Turns on formatted logging output as configured.
This is called automatically by `parse_command_line`.
"""
log_file_prefix = kwargs.get('log_file_prefix', None)
log_to_socket = kwargs.get('log_to_socket', None)
root_logger = logging.getLogger()
if log_file_prefix:
# 10M
log_file_max_size = kwargs.get('log_file_max_size', 1024 * 1024 * 10)
log_file_num_backups = kwargs.get('log_file_num_backups', 5)
#channel = ConcurrentRotatingFileHandler(
channel = logging.handlers.RotatingFileHandler(
mode="a",
filename=log_file_prefix,
maxBytes=log_file_max_size,
backupCount=log_file_num_backups)
channel.setFormatter(_LogFormatter())
root_logger.addHandler(channel)
if log_to_socket:
channel = logging.handlers.SocketHandler('localhost',
logging.handlers.DEFAULT_TCP_LOGGING_PORT)
channel.setFormatter(_LogFormatter())
root_logger.addHandler(channel)
if kwargs.get('log_to_std', 'true') == 'true':
channel = logging.StreamHandler()
channel.setFormatter(_LogFormatter())
root_logger.addHandler(channel)
def setup_logger(**kwargs):
level = kwargs.get('log_level', 'info')
level_str = dict(info=logging.INFO, debug=logging.DEBUG,
error=logging.ERROR, warning=logging.WARNING,
critical=logging.CRITICAL)
logging.getLogger().setLevel(level_str.get(level, logging.INFO))
_enable_pretty_logging(**kwargs)