summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-08-04 18:01:02 +0300
committerLars Wirzenius <liw@liw.fi>2017-08-04 18:01:02 +0300
commit4b183be2254b48645959a494821c00ada98e5947 (patch)
treeebdcb25570353d506677398fd2baeb2c1469f7d1
parent7268502c26efb4fdfbe815c59d400a061411ae67 (diff)
downloadslog-4b183be2254b48645959a494821c00ada98e5947.tar.gz
Add: log object massager
-rw-r--r--slog/slog.py7
-rw-r--r--slog/slog_tests.py20
2 files changed, 26 insertions, 1 deletions
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):