From 6d54f600354dbcb287ecede87262d38e7647194b Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Wed, 22 Feb 2017 06:36:27 +0000 Subject: Updated ColorizingStreamHandler and test. Thanks to Sam Bull for the patch. --- logutils/colorize.py | 3 ++- tests/test_colorize.py | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/logutils/colorize.py b/logutils/colorize.py index f95c036..ad9a3b9 100644 --- a/logutils/colorize.py +++ b/logutils/colorize.py @@ -64,7 +64,8 @@ class ColorizingStreamHandler(logging.StreamHandler): message = self.format(record) stream = self.stream if unicode and isinstance(message, unicode): - enc = getattr(stream, 'encoding', 'utf-8') + # Sometimes there's an encoding attribute, but it's None. + enc = getattr(stream, 'encoding', None) or 'utf-8' message = message.encode(enc, 'replace') if not self.is_tty: stream.write(message) diff --git a/tests/test_colorize.py b/tests/test_colorize.py index 022b631..b4f9fa6 100644 --- a/tests/test_colorize.py +++ b/tests/test_colorize.py @@ -3,8 +3,8 @@ # import logging import logutils.colorize -import os import sys +import tempfile import unittest if sys.version_info[0] < 3: @@ -22,3 +22,18 @@ class ColorizeTest(unittest.TestCase): logger.warning(u('Some unicode string with some \u015b\u0107\u017a\xf3\u0142 chars')) finally: logger.removeHandler(handler) + + def test_colorize_to_file_with_unicode(self): + if sys.version_info >= (3, 0): + raise unittest.SkipTest('tests 2.x specific issue') + logger = logging.getLogger() + with tempfile.TemporaryFile() as logfile_handle: + handler = logutils.colorize.ColorizingStreamHandler(logfile_handle) + logger.addHandler(handler) + try: + logger.warning(u('Some unicode string')) + logfile_handle.seek(0) + self.assertTrue('Some unicode string' in logfile_handle.read()) + finally: + logger.removeHandler(handler) + handler.close() -- cgit v1.2.1