增加日志类
diff --git a/tcutils/loghelper.py b/tcutils/loghelper.py
new file mode 100644
index 0000000..5bebb21
--- /dev/null
+++ b/tcutils/loghelper.py
@@ -0,0 +1,76 @@
+# -*- 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)
+ logging.getLogger().setLevel(level_str.get(level, logging.INFO))
+ _enable_pretty_logging(**kwargs)