summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVinay Sajip <vinay_sajip@yahoo.co.uk>2017-02-22 06:36:27 +0000
committerVinay Sajip <vinay_sajip@yahoo.co.uk>2017-02-22 06:36:27 +0000
commit6d54f600354dbcb287ecede87262d38e7647194b (patch)
treeab21bd8896127cb8eaa947e5fb690bbb673dea36
parente06d6dfd36f19a8b6e80e00bd09af4f769fc1ed2 (diff)
downloadlogutils-git-6d54f600354dbcb287ecede87262d38e7647194b.tar.gz
Updated ColorizingStreamHandler and test.
Thanks to Sam Bull for the patch.
-rw-r--r--logutils/colorize.py3
-rw-r--r--tests/test_colorize.py17
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()