diff --git a/oslo_log/formatters.py b/oslo_log/formatters.py index 39f49e2b..bf8455f2 100644 --- a/oslo_log/formatters.py +++ b/oslo_log/formatters.py @@ -452,7 +452,7 @@ class ContextFormatter(logging.Formatter): # to an empty string so we don't throw an exception if # they get used for key in ('instance', 'color', 'user_identity', 'resource', - 'user_name', 'project_name'): + 'user_name', 'project_name', 'global_request_id'): if key not in record.__dict__: record.__dict__[key] = '' diff --git a/oslo_log/tests/unit/test_log.py b/oslo_log/tests/unit/test_log.py index 041d5cfb..4c34d4c4 100644 --- a/oslo_log/tests/unit/test_log.py +++ b/oslo_log/tests/unit/test_log.py @@ -964,6 +964,18 @@ class ContextFormatterTestCase(LogTestBase): str(message))) self.assertEqual(expected, self.stream.getvalue()) + def test_global_request_id_logging(self): + fmt_str = "HAS CONTEXT [%(request_id)s %(global_request_id)s]: " \ + "%(message)s" + self.config(logging_context_format_string=fmt_str) + ctxt = _fake_context() + ctxt.request_id = '99' + message = 'test' + self.log.info(message, context=ctxt) + expected = ("HAS CONTEXT [%s %s]: %s\n" % + (ctxt.request_id, ctxt.global_request_id, str(message))) + self.assertEqual(expected, self.stream.getvalue()) + def test_user_identity_logging_set_format(self): self.config(logging_context_format_string="HAS CONTEXT " "[%(request_id)s " diff --git a/releasenotes/notes/init-global-request-id-eb2031bc221e5fb7.yaml b/releasenotes/notes/init-global-request-id-eb2031bc221e5fb7.yaml new file mode 100644 index 00000000..ff229ecf --- /dev/null +++ b/releasenotes/notes/init-global-request-id-eb2031bc221e5fb7.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Initialize the ``global_request_id`` context variable with a default + value if the key is not passed in the context.