# -*- 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) |