|
6 | 6 | import unittest
|
7 | 7 | import logging
|
8 | 8 |
|
9 |
| -from logtail.handler import LogtailHandler |
| 9 | +from logtail import LogtailHandler, context |
10 | 10 |
|
11 | 11 |
|
12 | 12 | class TestLogtailHandler(unittest.TestCase):
|
@@ -138,3 +138,46 @@ def test_error_suppression(self, MockWorker):
|
138 | 138 |
|
139 | 139 | handler.raise_exceptions = False
|
140 | 140 | logger.critical('hello')
|
| 141 | + |
| 142 | + @mock.patch('logtail.handler.FlushWorker') |
| 143 | + def test_can_send_unserializable_extra_data(self, MockWorker): |
| 144 | + buffer_capacity = 1 |
| 145 | + handler = LogtailHandler( |
| 146 | + source_token=self.source_token, |
| 147 | + buffer_capacity=buffer_capacity |
| 148 | + ) |
| 149 | + |
| 150 | + logger = logging.getLogger(__name__) |
| 151 | + logger.handlers = [] |
| 152 | + logger.addHandler(handler) |
| 153 | + logger.info('hello', extra={'data': {'unserializable': UnserializableObject()}}) |
| 154 | + |
| 155 | + log_entry = handler.pipe.get() |
| 156 | + |
| 157 | + self.assertEqual(log_entry['message'], 'hello') |
| 158 | + self.assertRegex(log_entry['data']['unserializable'], r'^<tests\.test_handler\.UnserializableObject object at 0x[0-f]+>$') |
| 159 | + self.assertTrue(handler.pipe.empty()) |
| 160 | + |
| 161 | + @mock.patch('logtail.handler.FlushWorker') |
| 162 | + def test_can_send_unserializable_extra_context(self, MockWorker): |
| 163 | + buffer_capacity = 1 |
| 164 | + handler = LogtailHandler( |
| 165 | + source_token=self.source_token, |
| 166 | + buffer_capacity=buffer_capacity |
| 167 | + ) |
| 168 | + |
| 169 | + logger = logging.getLogger(__name__) |
| 170 | + logger.handlers = [] |
| 171 | + logger.addHandler(handler) |
| 172 | + with context(data={'unserializable': UnserializableObject()}): |
| 173 | + logger.info('hello') |
| 174 | + |
| 175 | + log_entry = handler.pipe.get() |
| 176 | + |
| 177 | + self.assertEqual(log_entry['message'], 'hello') |
| 178 | + self.assertRegex(log_entry['context']['data']['unserializable'], r'^<tests\.test_handler\.UnserializableObject object at 0x[0-f]+>$') |
| 179 | + self.assertTrue(handler.pipe.empty()) |
| 180 | + |
| 181 | + |
| 182 | +class UnserializableObject(object): |
| 183 | + """ Because this is a custom class, it cannot be serialized into JSON. """ |
0 commit comments