From 67e919c7ab8fadf4519cdca01d7c7c96b18effc3 Mon Sep 17 00:00:00 2001 From: Alexis Lee Date: Thu, 24 Jan 2019 08:49:59 +0000 Subject: Add 'levelkey' + 'tbkey' params Currently the level and traceback must be present as keys 'levelname' and 'traceback'. Parameterising these will make the utility more broadly applicable. Change-Id: I80c9370081ef8229e8c37f0f86cb7d779e1526ec --- oslo_log/cmds/convert_json.py | 25 ++++++++++++++++++++----- oslo_log/tests/unit/test_convert_json.py | 24 ++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 7 deletions(-) (limited to 'oslo_log') diff --git a/oslo_log/cmds/convert_json.py b/oslo_log/cmds/convert_json.py index bed6ad7..ef914d1 100644 --- a/oslo_log/cmds/convert_json.py +++ b/oslo_log/cmds/convert_json.py @@ -29,6 +29,8 @@ termcolor = importutils.try_import('termcolor') _USE_COLOR = False +DEFAULT_LEVEL_KEY = 'levelname' +DEFAULT_TRACEBACK_KEY = 'traceback' def main(): @@ -41,6 +43,8 @@ def main(): args.locator, loggers=args.loggers, levels=args.levels, + level_key=args.levelkey, + traceback_key=args.tbkey, ) if args.lines: # Read backward until we find all of our newline characters @@ -74,6 +78,13 @@ def parse_args(): parser.add_argument("--locator", default='[%(funcname)s %(pathname)s:%(lineno)s]', help="Locator to append to DEBUG records") + parser.add_argument("--levelkey", + default=DEFAULT_LEVEL_KEY, + help="Key in the JSON record where the level is held") + parser.add_argument("--tbkey", + default=DEFAULT_TRACEBACK_KEY, + help="Key in the JSON record where the" + " traceback/exception is held") parser.add_argument("-c", "--color", action='store_true', default=False, help="Color log levels (requires `termcolor`)") @@ -144,7 +155,9 @@ def reformat_json(fh, formatter, follow=False): yield out_line -def console_format(prefix, locator, record, loggers=[], levels=[]): +def console_format(prefix, locator, record, loggers=[], levels=[], + level_key=DEFAULT_LEVEL_KEY, + traceback_key=DEFAULT_TRACEBACK_KEY): # Provide an empty string to format-specifiers the record is # missing, instead of failing. Doesn't work for non-string # specifiers. @@ -155,11 +168,11 @@ def console_format(prefix, locator, record, loggers=[], levels=[]): if not any(name.startswith(n) for n in loggers): return if levels: - if record.get('levelname') not in levels: + if record.get(level_key) not in levels: return - levelname = record.get('levelname') + levelname = record.get(level_key) if levelname: - record['levelname'] = colorise(levelname) + record[level_key] = colorise(levelname) try: prefix = prefix % record @@ -177,8 +190,10 @@ def console_format(prefix, locator, record, loggers=[], levels=[]): yield ' '.join(x for x in [prefix, record['message'], locator] if x) - tb = record.get('traceback') + tb = record.get(traceback_key) if tb: + if type(tb) is str: + tb = tb.rstrip().split("\n") for tb_line in tb: yield ' '.join([prefix, tb_line]) diff --git a/oslo_log/tests/unit/test_convert_json.py b/oslo_log/tests/unit/test_convert_json.py index d349cd9..3026393 100644 --- a/oslo_log/tests/unit/test_convert_json.py +++ b/oslo_log/tests/unit/test_convert_json.py @@ -30,6 +30,14 @@ TRACEBACK_RECORD = { 'message': 'msg', 'traceback': "abc\ndef", } +DEBUG_LEVEL_KEY_RECORD = { + 'message': 'msg', + 'level': 'DEBUG', +} +EXCEPTION_RECORD = { + 'message': 'msg', + 'exception': "abc\ndef", +} class ConvertJsonTestCase(test_base.BaseTestCase): @@ -54,8 +62,8 @@ class ConvertJsonTestCase(test_base.BaseTestCase): [TRIVIAL_RECORD, TRIVIAL_RECORD], self._reformat("\n".join([text, text]))) - def _lines(self, record, pre='pre', loc='loc'): - return list(convert_json.console_format(pre, loc, record)) + def _lines(self, record, pre='pre', loc='loc', **args): + return list(convert_json.console_format(pre, loc, record, **args)) def test_console_format_trivial(self): lines = self._lines(TRIVIAL_RECORD) @@ -68,3 +76,15 @@ class ConvertJsonTestCase(test_base.BaseTestCase): def test_console_format_debug_levelno(self): lines = self._lines(DEBUG_LEVELNO_RECORD) self.assertEqual(['pre msg'], lines) + + def test_console_format_debug_level_key(self): + lines = self._lines(DEBUG_LEVEL_KEY_RECORD, level_key='level') + self.assertEqual(['pre msg'], lines) + + def test_console_format_traceback(self): + lines = self._lines(TRACEBACK_RECORD) + self.assertEqual(['pre msg', 'pre abc', 'pre def'], lines) + + def test_console_format_exception(self): + lines = self._lines(EXCEPTION_RECORD, traceback_key='exception') + self.assertEqual(['pre msg', 'pre abc', 'pre def'], lines) -- cgit v1.2.1