|
4 | 4 | import json
|
5 | 5 | import sys
|
6 | 6 | import traceback
|
| 7 | +import random |
7 | 8 |
|
8 | 9 | try:
|
9 | 10 | import xmlrunner
|
|
23 | 24 |
|
24 | 25 | class TestJsonLogger(unittest.TestCase):
|
25 | 26 | def setUp(self):
|
26 |
| - self.logger = logging.getLogger('logging-test') |
| 27 | + self.logger = logging.getLogger("logging-test-{}".format(random.randint(1, 101))) |
27 | 28 | self.logger.setLevel(logging.DEBUG)
|
28 | 29 | self.buffer = StringIO()
|
29 | 30 |
|
@@ -188,7 +189,26 @@ def testEnsureAsciiFalse(self):
|
188 | 189 | msg = self.buffer.getvalue().split('"message": "', 1)[1].split('"', 1)[0]
|
189 | 190 | self.assertEqual(msg, "Привет")
|
190 | 191 |
|
191 |
| - |
| 192 | + def testCustomObjectSerialization(self): |
| 193 | + def encode_complex(z): |
| 194 | + if isinstance(z, complex): |
| 195 | + return (z.real, z.imag) |
| 196 | + else: |
| 197 | + type_name = z.__class__.__name__ |
| 198 | + raise TypeError(f"Object of type '{type_name}' is no JSON serializable") |
| 199 | + |
| 200 | + formatter = jsonlogger.JsonFormatter(json_default=encode_complex, |
| 201 | + json_encoder=json.JSONEncoder) |
| 202 | + self.logHandler.setFormatter(formatter) |
| 203 | + |
| 204 | + value = { |
| 205 | + "special": complex(3, 8), |
| 206 | + "run": 12 |
| 207 | + } |
| 208 | + |
| 209 | + self.logger.info(" message", extra=value) |
| 210 | + msg = self.buffer.getvalue() |
| 211 | + self.assertEqual(msg, "{\"message\": \" message\", \"special\": [3.0, 8.0], \"run\": 12}\n") |
192 | 212 |
|
193 | 213 | if __name__ == '__main__':
|
194 | 214 | if len(sys.argv[1:]) > 0:
|
|
0 commit comments