Emit message which merged user-supplied argument in log_handler

When using PublishErrorsHandler, it will missing user-supplied arguments.
For example, do LOG.info("blabla %s", "foo"), the payload only contains
"blabla %s", but we expect it like "blabla foo". This patch fix it.

Change-Id: I91289cc4a60f5dab89bca852e6f52b4b83831e47
Closes-bug: #1278291
This commit is contained in:
gtt116 2014-02-10 06:46:35 +00:00
parent a53c4dc1db
commit 1f1d3cd323
2 changed files with 19 additions and 1 deletions

View File

@ -27,4 +27,4 @@ class PublishErrorsHandler(logging.Handler):
notifier.api.notify(None, 'error.publisher',
'error_notification',
notifier.api.ERROR,
dict(error=record.msg))
dict(error=record.getMessage()))

View File

@ -203,6 +203,24 @@ class PublishErrorsHandlerTestCase(test.BaseTestCase):
self.publiserrorshandler.emit(logrecord)
self.assertTrue(self.stub_flg)
def test_emit_with_args(self):
"""Make sure emit the message which merged user-supplied arguments."""
self.config(notification_driver=[
'openstack.common.notifier.rabbit_notifier'
])
self.emit_payload = None
expect_payload = dict(error="msg with args: show me")
def fake_notifier(_context, _publisher_id, _event_type, _priority,
payload):
self.emit_payload = payload
self.stubs.Set(notifier, 'notify', fake_notifier)
logrecord = logging.LogRecord('name', 'WARN', '/tmp', 1,
'msg with args: %s', 'show me', None)
self.publiserrorshandler.emit(logrecord)
self.assertEqual(self.emit_payload, expect_payload)
class LogLevelTestCase(test.BaseTestCase):
def setUp(self):