Open
Description
Expected Behaviour
Log records must appear in Pytest's caplog
fixture since caplog
is recommended for testing the logs in documentation.
Current Behaviour
When using a new Logger (non-preconfigured), the log record does not appear in caplog
. However, messages logged by a child logger is captured by caplog
.
Code snippet
The following tests must pass
import random
import string
import pytest
from _pytest.logging import LogCaptureHandler
from aws_lambda_powertools.logging.logger import Logger
@pytest.fixture
def service_name():
chars = string.ascii_letters + string.digits
return "".join(random.SystemRandom().choice(chars) for _ in range(15))
def test_non_preconfigured_logger_with_caplog(caplog, service_name):
caplog.set_level("INFO")
logger = Logger(service=service_name)
logger.info("testing, testing...")
pytest_handler_existence = any(isinstance(item, LogCaptureHandler) for item in logger._logger.parent.handlers)
assert pytest_handler_existence is True
assert len(caplog.records) == 1
assert caplog.records[0].message == "testing, testing..."
def test_child_logger_with_caplog(caplog):
caplog.set_level("INFO")
logger = Logger(child=True)
logger.info("testing, testing...")
assert len(caplog.records) == 1
But, test_non_preconfigured_logger_with_caplog
fails with:
> assert len(caplog.records) == 1
E assert 0 == 1
E + where 0 = len([])
E + where [] = <_pytest.logging.LogCaptureFixture object at 0x104e7c560>.records
Possible Solution
Add the following guard clause the _init_logger
method of the Logger
class (before checking if self.child:
)
if os.environ.get("PYTEST_CURRENT_TEST"):
return
Steps to Reproduce
Copy and paste the above tests in tests/functional/logger/required_dependencies/test_logger.py
file and run.
Powertools for AWS Lambda (Python) version
latest
AWS Lambda function runtime
3.12
Packaging format used
PyPi
Debugging logs
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Working on it