Commit 9a7113c4 authored by Antoine Millet's avatar Antoine Millet
Browse files

Fixed bug with unicode string logging.

parent c79f8dff
Loading
Loading
Loading
Loading
+21 −1
Original line number Diff line number Diff line
@@ -37,6 +37,26 @@ DEFAULT_CONFIGURATION = {
    'maxidle': 30,
}


class EncodingFormatter(logging.Formatter, object):

    def __init__(self, fmt=None, datefmt=None, encoding='utf-8'):
        super(EncodingFormatter, self).__init__(fmt, datefmt)
        self._encoding = encoding

    def formatException(self, ei):
        expt = super(EncodingFormatter, self).formatException( ei)
        if isinstance(expt, str):
            expt = expt.decode(self._encoding, 'replace')
        return expt

    def format(self, record):
        msg = super(EncodingFormatter, self).format(record)
        if isinstance(msg, unicode):
            msg = msg.encode(self._encoding, 'replace')
        return msg


def run_server(options):

    # Setup logging facility:
@@ -60,7 +80,7 @@ def run_server(options):
        handler = logging.handlers.SysLogHandler(address='/dev/log',
                                                 facility=facility)

    fmt = logging.Formatter('cc-server: %(levelname)s %(message)s')
    fmt = EncodingFormatter('cc-server: %(levelname)s %(message)s')
    handler.setFormatter(fmt)
    logger.addHandler(handler)