blob: 5bebb21257c19ffdde7882350dba2a26e4c09e96 [file] [log] [blame]
Cheng Tange757ffe2012-09-26 09:34:21 +08001# -*- coding: utf-8 -*-
2"""
3Created on 2012-6-12
4
5@author: cheng.tang
6"""
7
8import logging
9import time
10import logging.handlers
11
12
13class _LogFormatter(logging.Formatter):
14 def __init__(self, *args, **kwargs):
15 logging.Formatter.__init__(self, *args, **kwargs)
16
17 def format(self, record):
18 try:
19 record.message = record.getMessage()
20 except Exception, e:
21 record.message = "Bad message (%r): %r" % (e, record.__dict__)
22 #record.asctime = time.strftime(
23 # "%y%m%d %H:%M:%S", self.converter(record.created))
24 record.asctime = time.strftime(
25 "%m%d %H:%M:%S", self.converter(record.created))
26 #prefix = '[%(levelname)1.1s %(asctime)s %(module)s:%(lineno)d]' % \
27 # record.__dict__
28 prefix = '[%(levelname)1.1s %(asctime)s]' % record.__dict__
29
30 formatted = prefix + " " + record.message
31 if record.exc_info:
32 if not record.exc_text:
33 record.exc_text = self.formatException(record.exc_info)
34 if record.exc_text:
35 formatted = formatted.rstrip() + "\n" + record.exc_text
36 return formatted.replace("\n", "\n ")
37
38
39def _enable_pretty_logging(**kwargs):
40 """Turns on formatted logging output as configured.
41 This is called automatically by `parse_command_line`.
42 """
43 log_file_prefix = kwargs.get('log_file_prefix', None)
44 log_to_socket = kwargs.get('log_to_socket', None)
45 root_logger = logging.getLogger()
46 if log_file_prefix:
47 # 10M
48 log_file_max_size = kwargs.get('log_file_max_size', 1024 * 1024 * 10)
49 log_file_num_backups = kwargs.get('log_file_num_backups', 5)
50 #channel = ConcurrentRotatingFileHandler(
51 channel = logging.handlers.RotatingFileHandler(
52 mode="a",
53 filename=log_file_prefix,
54 maxBytes=log_file_max_size,
55 backupCount=log_file_num_backups)
56 channel.setFormatter(_LogFormatter())
57 root_logger.addHandler(channel)
58
59 if log_to_socket:
60 channel = logging.handlers.SocketHandler('localhost',
61 logging.handlers.DEFAULT_TCP_LOGGING_PORT)
62 channel.setFormatter(_LogFormatter())
63 root_logger.addHandler(channel)
64
65 if kwargs.get('log_to_std', 'true') == 'true':
66 channel = logging.StreamHandler()
67 channel.setFormatter(_LogFormatter())
68 root_logger.addHandler(channel)
69
70
71def setup_logger(**kwargs):
72 level = kwargs.get('log_level', 'info')
73 level_str = dict(info=logging.INFO, debug=logging.DEBUG,
74 error=logging.ERROR)
75 logging.getLogger().setLevel(level_str.get(level, logging.INFO))
76 _enable_pretty_logging(**kwargs)