Skip to content

Commit 0893e14

Browse files
Starting tests
1 parent d24a258 commit 0893e14

File tree

3 files changed

+124
-8
lines changed

3 files changed

+124
-8
lines changed

aws_lambda_powertools/logging/logger.py

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import os
1313
import random
1414
import sys
15+
import time
1516
import warnings
1617
from contextlib import contextmanager
1718
from typing import IO, TYPE_CHECKING, Any, Callable, Generator, Iterable, Mapping, TypeVar, overload
@@ -457,6 +458,12 @@ def decorate(event, context, *args, **kwargs):
457458

458459
return decorate
459460

461+
def _add_log_to_buffer(self, level, msg, filename, line, function, **kwargs):
462+
if self._buffer_cache:
463+
return False
464+
465+
return True
466+
460467
def info(
461468
self,
462469
msg: object,
@@ -470,14 +477,27 @@ def info(
470477
extra = extra or {}
471478
extra = {**extra, **kwargs}
472479

473-
return self._logger.info(
474-
msg,
475-
*args,
476-
exc_info=exc_info,
477-
stack_info=stack_info,
478-
stacklevel=stacklevel,
479-
extra=extra,
480-
)
480+
if self._logger_buffer:
481+
caller_frame = inspect.stack()[1]
482+
record = {
483+
"level": "INFO",
484+
"msg": msg % args if args else msg,
485+
"filename": caller_frame.filename,
486+
"line": caller_frame.lineno,
487+
"function": caller_frame.function,
488+
"extra_kwargs": kwargs,
489+
"timestamp": time.time(),
490+
}
491+
return self._add_log_to_buffer(**record)
492+
else:
493+
return self._logger.info(
494+
msg,
495+
*args,
496+
exc_info=exc_info,
497+
stack_info=stack_info,
498+
stacklevel=stacklevel,
499+
extra=extra,
500+
)
481501

482502
def error(
483503
self,
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
"""aws_lambda_logging tests."""
2+
3+
import io
4+
import json
5+
import random
6+
import string
7+
from collections import namedtuple
8+
9+
import pytest
10+
11+
from aws_lambda_powertools import Logger
12+
from aws_lambda_powertools.logging.buffer import LoggerBufferConfig
13+
14+
15+
@pytest.fixture
16+
def lambda_context():
17+
lambda_context = {
18+
"function_name": "test",
19+
"memory_limit_in_mb": 128,
20+
"invoked_function_arn": "arn:aws:lambda:eu-west-1:809313241:function:test",
21+
"aws_request_id": "52fdfc07-2182-154f-163f-5f0f9a621d72",
22+
}
23+
24+
return namedtuple("LambdaContext", lambda_context.keys())(*lambda_context.values())
25+
26+
27+
def check_log_dict(log_dict):
28+
assert "timestamp" in log_dict
29+
assert "level" in log_dict
30+
assert "location" in log_dict
31+
assert "message" in log_dict
32+
33+
34+
@pytest.fixture
35+
def stdout():
36+
return io.StringIO()
37+
38+
39+
@pytest.fixture
40+
def service_name():
41+
chars = string.ascii_letters + string.digits
42+
return "".join(random.SystemRandom().choice(chars) for _ in range(15))
43+
44+
45+
def capture_logging_output(stdout):
46+
return [json.loads(d.strip()) for d in stdout.getvalue().strip().split("\n")]
47+
48+
49+
def test_logger_buffer_is_enabled():
50+
51+
buffer_config = LoggerBufferConfig(max_size=10240)
52+
logger = Logger(level="INFO", buffer_config=buffer_config)
53+
54+
leo = logger.info("A")
55+
56+
assert leo is True
57+
58+
59+
@pytest.mark.parametrize("level", ["DEBUG", "WARNING", "ERROR", "INFO", "CRITICAL"])
60+
def test_setup_with_valid_log_levels(stdout, level, service_name):
61+
logger = Logger(service=service_name, level=level, stream=stdout, request_id="request id!", another="value")
62+
msg = "This is a test"
63+
log_command = {
64+
"INFO": logger.info,
65+
"ERROR": logger.error,
66+
"WARNING": logger.warning,
67+
"DEBUG": logger.debug,
68+
"CRITICAL": logger.critical,
69+
}
70+
71+
log_message = log_command[level]
72+
log_message(msg)
73+
74+
log_dict = json.loads(stdout.getvalue().strip())
75+
76+
check_log_dict(log_dict)
77+
78+
assert level == log_dict["level"]
79+
assert "This is a test" == log_dict["message"]
80+
assert "request id!" == log_dict["request_id"]
81+
assert "exception" not in log_dict
82+
83+
84+
def test_logging_exception_traceback(stdout, service_name):
85+
logger = Logger(service=service_name, level="DEBUG", stream=stdout)
86+
87+
try:
88+
raise ValueError("Boom")
89+
except ValueError:
90+
logger.exception("A value error occurred")
91+
92+
log_dict = json.loads(stdout.getvalue())
93+
94+
check_log_dict(log_dict)
95+
assert "ERROR" == log_dict["level"]
96+
assert "exception" in log_dict

tests/performance/test_zlib_shared_functions.py

Whitespace-only changes.

0 commit comments

Comments
 (0)