diff options
author | Alexis Lee <openstack@lxsli.co.uk> | 2019-01-24 08:49:59 +0000 |
---|---|---|
committer | Alexis Lee <openstack@lxsli.co.uk> | 2019-01-30 13:54:13 +0000 |
commit | 67e919c7ab8fadf4519cdca01d7c7c96b18effc3 (patch) | |
tree | 7a0753796bf5caaebc75e59194c68e29b650efab | |
parent | 1babd44cf4f7bae77ffbc14e1fc996962111cf7b (diff) | |
download | oslo-log-67e919c7ab8fadf4519cdca01d7c7c96b18effc3.tar.gz |
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
-rw-r--r-- | oslo_log/cmds/convert_json.py | 25 | ||||
-rw-r--r-- | oslo_log/tests/unit/test_convert_json.py | 24 |
2 files changed, 42 insertions, 7 deletions
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) |