From 4b183be2254b48645959a494821c00ada98e5947 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Fri, 4 Aug 2017 18:01:02 +0300 Subject: Add: log object massager --- slog/slog.py | 7 +++++++ slog/slog_tests.py | 20 +++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/slog/slog.py b/slog/slog.py index 81d2c61..b3725dd 100644 --- a/slog/slog.py +++ b/slog/slog.py @@ -46,6 +46,7 @@ class StructuredLog: self._msg_counter = slog.Counter() self._context = {} self._writers = [] + self._massagers = [] def close(self): for writer, _ in self._writers: @@ -55,6 +56,9 @@ class StructuredLog: def add_log_writer(self, writer, filter_rule): self._writers.append((writer, filter_rule)) + def add_log_massager(self, massager): + self._massagers.append(massager) + def set_context(self, new_context): thread_id = self._get_thread_id() self._context[thread_id] = new_context @@ -73,6 +77,9 @@ class StructuredLog: log_obj[key] = self._convert_value(value) self._add_extra_fields(log_obj, exc_info) + for massager in self._massagers: + log_obj = massager(log_obj) + for writer, filter_rule in self._writers: if filter_rule.allow(log_obj): writer.write(log_obj) diff --git a/slog/slog_tests.py b/slog/slog_tests.py index cc18f15..04f1cf4 100644 --- a/slog/slog_tests.py +++ b/slog/slog_tests.py @@ -187,7 +187,7 @@ class StructuredLogTests(unittest.TestCase): self.assertEqual(objs[0]['dikt'], dikt) def test_logs_to_two_files(self): - filename1 = os.path.join(self.tempdir, 'slog1XS') + filename1 = os.path.join(self.tempdir, 'slog1') writer1 = slog.FileSlogWriter() writer1.set_filename(filename1) @@ -205,6 +205,24 @@ class StructuredLogTests(unittest.TestCase): self.assertEqual(objs1, objs2) + def test_massages_log_objects(self): + + def add_foo(log_obj): + log_obj['foo'] = 'this is foo' + return log_obj + + filename = os.path.join(self.tempdir, 'slog.log') + writer = slog.FileSlogWriter() + writer.set_filename(filename) + + log = slog.StructuredLog() + log.add_log_writer(writer, slog.FilterAllow()) + log.add_log_massager(add_foo) + + log.log('test', msg_text='hello') + objs = self.read_log_entries(writer) + self.assertEqual(objs[0]['foo'], 'this is foo') + class FileSlogWriterTests(unittest.TestCase): -- cgit v1.2.1