diff --git a/oslo_log/handlers.py b/oslo_log/handlers.py index 320a1e2..347384f 100644 --- a/oslo_log/handlers.py +++ b/oslo_log/handlers.py @@ -19,6 +19,7 @@ try: import syslog except ImportError: syslog = None +from oslo_utils import encodeutils NullHandler = logging.NullHandler @@ -52,9 +53,11 @@ if syslog is not None: syslog.openlog(binary_name, 0, facility) def emit(self, record): - syslog.syslog(self.severity_map.get(record.levelname, - syslog.LOG_DEBUG), - self.format(record)) + priority = self.severity_map.get(record.levelname, + syslog.LOG_DEBUG) + message = encodeutils.safe_encode(self.format(record)) + + syslog.syslog(priority, message) class ColorHandler(logging.StreamHandler): diff --git a/oslo_log/tests/unit/test_log.py b/oslo_log/tests/unit/test_log.py index e1590ec..1923394 100644 --- a/oslo_log/tests/unit/test_log.py +++ b/oslo_log/tests/unit/test_log.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- + # Copyright (c) 2011 United States Government as represented by the # Administrator of the National Aeronautics and Space Administration. # All Rights Reserved. @@ -259,6 +261,17 @@ class OSSysLogHandlerTestCase(BaseTestCase): log._find_facility, "fougere") + def test_syslog(self): + msg_unicode = u"Benoît Knecht & François Deppierraz login failure" + msg_utf8 = msg_unicode.encode('utf-8') + + handler = handlers.OSSysLogHandler() + syslog.syslog = mock.Mock() + handler.emit( + logging.LogRecord("name", logging.INFO, "path", 123, + msg_unicode, None, None)) + syslog.syslog.assert_called_once_with(syslog.LOG_INFO, msg_utf8) + class LogLevelTestCase(BaseTestCase): def setUp(self):