增加日志类
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)