30f2074a37
It would save a lot of space to only write JSON logs, rather than also write formatted logs. This utility turns the former into the latter so we can do this without removing the ability of a sysadmin to read logs in a sensible format. You can either provide a filename or pipe via stdin. `tail -f` works as stdin. Each record must occupy precisely one line. Change-Id: I334e1e52d442f82bf68da9e581ce44bc3465208b Co-Authored-By: Alexis Lee <lxsli@hpe.com>
71 lines
2.2 KiB
Python
71 lines
2.2 KiB
Python
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import six
|
|
|
|
from oslo_log.cmds import convert_json
|
|
from oslo_serialization import jsonutils
|
|
from oslotest import base as test_base
|
|
|
|
|
|
TRIVIAL_RECORD = {'message': 'msg'}
|
|
DEBUG_LEVELNAME_RECORD = {
|
|
'message': 'msg',
|
|
'levelname': 'DEBUG',
|
|
}
|
|
DEBUG_LEVELNO_RECORD = {
|
|
'message': 'msg',
|
|
'levelno': 0,
|
|
}
|
|
TRACEBACK_RECORD = {
|
|
'message': 'msg',
|
|
'traceback': "abc\ndef",
|
|
}
|
|
|
|
|
|
class ConvertJsonTestCase(test_base.BaseTestCase):
|
|
def setUp(self):
|
|
super(ConvertJsonTestCase, self).setUp()
|
|
|
|
def _reformat(self, text):
|
|
fh = six.StringIO(text)
|
|
return list(convert_json.reformat_json(fh, lambda x: [x]))
|
|
|
|
def test_reformat_json_single(self):
|
|
text = jsonutils.dumps(TRIVIAL_RECORD)
|
|
self.assertEqual([TRIVIAL_RECORD], self._reformat(text))
|
|
|
|
def test_reformat_json_blanks(self):
|
|
text = jsonutils.dumps(TRIVIAL_RECORD)
|
|
self.assertEqual([TRIVIAL_RECORD], self._reformat(text + "\n\n"))
|
|
|
|
def test_reformat_json_double(self):
|
|
text = jsonutils.dumps(TRIVIAL_RECORD)
|
|
self.assertEqual(
|
|
[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 test_console_format_trivial(self):
|
|
lines = self._lines(TRIVIAL_RECORD)
|
|
self.assertEqual(['pre msg'], lines)
|
|
|
|
def test_console_format_debug_levelname(self):
|
|
lines = self._lines(DEBUG_LEVELNAME_RECORD)
|
|
self.assertEqual(['pre msg'], lines)
|
|
|
|
def test_console_format_debug_levelno(self):
|
|
lines = self._lines(DEBUG_LEVELNO_RECORD)
|
|
self.assertEqual(['pre msg'], lines)
|