|
6 | 6 | import re
|
7 | 7 | import string
|
8 | 8 | import time
|
| 9 | +from collections import namedtuple |
9 | 10 |
|
10 | 11 | import pytest
|
11 | 12 |
|
12 | 13 | from aws_lambda_powertools import Logger
|
| 14 | +from aws_lambda_powertools.logging.formatter import LambdaPowertoolsFormatter |
13 | 15 | from aws_lambda_powertools.logging.formatters.datadog import DatadogLogFormatter
|
14 | 16 |
|
15 | 17 |
|
| 18 | +@pytest.fixture |
| 19 | +def lambda_context(): |
| 20 | + lambda_context = { |
| 21 | + "function_name": "test", |
| 22 | + "memory_limit_in_mb": 128, |
| 23 | + "invoked_function_arn": "arn:aws:lambda:eu-west-1:809313241:function:test", |
| 24 | + "aws_request_id": "52fdfc07-2182-154f-163f-5f0f9a621d72", |
| 25 | + } |
| 26 | + |
| 27 | + return namedtuple("LambdaContext", lambda_context.keys())(*lambda_context.values()) |
| 28 | + |
| 29 | + |
16 | 30 | @pytest.fixture
|
17 | 31 | def stdout():
|
18 | 32 | return io.StringIO()
|
@@ -358,3 +372,42 @@ def test_datadog_formatter_use_rfc3339_date(stdout, service_name):
|
358 | 372 | log = capture_logging_output(stdout)
|
359 | 373 |
|
360 | 374 | assert re.fullmatch(RFC3339_REGEX, log["timestamp"]) # "2022-10-27T17:42:26.841+0200"
|
| 375 | + |
| 376 | + |
| 377 | +def test_logger_logs_stack_trace_with_formatter_default_value(service_name, stdout): |
| 378 | + # GIVEN a Logger instance with LambdaPowertoolsFormatter set explictly |
| 379 | + # GIVE serialize_stacktrace default value = True |
| 380 | + logger = Logger(service=service_name, stream=stdout, logger_formatter=LambdaPowertoolsFormatter()) |
| 381 | + |
| 382 | + # WHEN invoking a Lambda |
| 383 | + def handler(event, context): |
| 384 | + try: |
| 385 | + raise ValueError("something went wrong") |
| 386 | + except Exception: |
| 387 | + logger.exception("Received an exception") |
| 388 | + |
| 389 | + # THEN we expect a "stack_trace" in log |
| 390 | + handler({}, lambda_context) |
| 391 | + log = capture_logging_output(stdout) |
| 392 | + assert "stack_trace" in log |
| 393 | + |
| 394 | + |
| 395 | +def test_logger_logs_stack_trace_with_formatter_non_default_value(service_name, stdout): |
| 396 | + # GIVEN a Logger instance with serialize_stacktrace = False |
| 397 | + logger = Logger( |
| 398 | + service=service_name, |
| 399 | + stream=stdout, |
| 400 | + logger_formatter=LambdaPowertoolsFormatter(serialize_stacktrace=False), |
| 401 | + ) |
| 402 | + |
| 403 | + # WHEN invoking a Lambda |
| 404 | + def handler(event, context): |
| 405 | + try: |
| 406 | + raise ValueError("something went wrong") |
| 407 | + except Exception: |
| 408 | + logger.exception("Received an exception") |
| 409 | + |
| 410 | + # THEN we expect a "stack_trace" not in log |
| 411 | + handler({}, lambda_context) |
| 412 | + log = capture_logging_output(stdout) |
| 413 | + assert "stack_trace" not in log |
0 commit comments