|
4 | 4 | import json
|
5 | 5 | import time
|
6 | 6 | import random
|
| 7 | +import sys |
7 | 8 | import ecs_logging
|
8 | 9 | from .compat import StringIO
|
9 | 10 |
|
10 | 11 |
|
| 12 | +requires_py3 = pytest.mark.skipif( |
| 13 | + sys.version_info[0] < 3, reason="Test requires Python 3.x+" |
| 14 | +) |
| 15 | + |
| 16 | + |
11 | 17 | @pytest.fixture(scope="function")
|
12 | 18 | def logger():
|
13 | 19 | return logging.getLogger("test-logger-%f-%f" % (time.time(), random.random()))
|
@@ -258,3 +264,34 @@ def test_exclude_fields_type_and_values():
|
258 | 264 | with pytest.raises(TypeError) as e:
|
259 | 265 | ecs_logging.StdlibFormatter(exclude_fields=[1])
|
260 | 266 | assert str(e.value) == "'exclude_fields' must be a sequence of strings"
|
| 267 | + |
| 268 | + |
| 269 | +@requires_py3 |
| 270 | +def test_stack_info(logger): |
| 271 | + stream = StringIO() |
| 272 | + handler = logging.StreamHandler(stream) |
| 273 | + handler.setFormatter(ecs_logging.StdlibFormatter()) |
| 274 | + logger.addHandler(handler) |
| 275 | + logger.setLevel(logging.DEBUG) |
| 276 | + |
| 277 | + logger.info("stack info!", stack_info=True) |
| 278 | + |
| 279 | + ecs = json.loads(stream.getvalue().rstrip()) |
| 280 | + assert list(ecs["error"].keys()) == ["stack_trace"] |
| 281 | + error_stack_trace = ecs["error"].pop("stack_trace") |
| 282 | + assert "test_stack_info" in error_stack_trace and __file__ in error_stack_trace |
| 283 | + |
| 284 | + |
| 285 | +@requires_py3 |
| 286 | +@pytest.mark.parametrize("exclude_fields", [["error"], ["error.stack_trace"]]) |
| 287 | +def test_stack_info_excluded(logger, exclude_fields): |
| 288 | + stream = StringIO() |
| 289 | + handler = logging.StreamHandler(stream) |
| 290 | + handler.setFormatter(ecs_logging.StdlibFormatter(exclude_fields=exclude_fields)) |
| 291 | + logger.addHandler(handler) |
| 292 | + logger.setLevel(logging.DEBUG) |
| 293 | + |
| 294 | + logger.info("stack info!", stack_info=True) |
| 295 | + |
| 296 | + ecs = json.loads(stream.getvalue().rstrip()) |
| 297 | + assert "error" not in ecs |
0 commit comments