|
| 1 | +from io import StringIO |
| 2 | +import json |
1 | 3 | import logging |
2 | 4 |
|
3 | 5 |
|
| 6 | +class JSONFormatter(logging.Formatter): |
| 7 | + """Custom formatter that outputs log records as JSON.""" |
| 8 | + |
| 9 | + def format(self, record): |
| 10 | + return json.dumps({k: str(v) for k, v in record.__dict__.items()}) |
| 11 | + |
| 12 | + |
4 | 13 | if __name__ == "__main__": |
5 | | - # Ensure if module is patched then default log formatter is set up for logs |
6 | | - ddtrace_logger = logging.getLogger("ddtrace") |
7 | | - if logging._datadog_patch: |
8 | | - assert ( |
9 | | - "[dd.service=%(dd.service)s dd.env=%(dd.env)s dd.version=%(dd.version)s" |
10 | | - " dd.trace_id=%(dd.trace_id)s dd.span_id=%(dd.span_id)s]" in ddtrace_logger.handlers[0].formatter._fmt |
11 | | - ) |
12 | | - else: |
13 | | - assert ( |
14 | | - "[dd.service=%(dd.service)s dd.env=%(dd.env)s dd.version=%(dd.version)s" |
15 | | - " dd.trace_id=%(dd.trace_id)s dd.span_id=%(dd.span_id)s]" not in ddtrace_logger.handlers[0].formatter._fmt |
16 | | - ) |
| 14 | + log_capture_string = StringIO() |
| 15 | + handler = logging.StreamHandler(log_capture_string) |
| 16 | + handler.setLevel(logging.INFO) |
| 17 | + handler.setFormatter(JSONFormatter()) |
| 18 | + |
| 19 | + logger = logging.getLogger("ddtrace") |
| 20 | + logger.addHandler(handler) |
| 21 | + logger.setLevel(logging.INFO) |
| 22 | + logger.info("Test log message") |
| 23 | + |
| 24 | + json_contents = json.loads(log_capture_string.getvalue().strip()) |
| 25 | + assert json_contents.get("dd.service") == "my-service" |
| 26 | + assert json_contents.get("dd.env") == "my-env" |
| 27 | + assert json_contents.get("dd.version") == "my-version" |
17 | 28 | print("Test success") |
0 commit comments