diff --git a/aws_lambda_powertools/logging/logger.py b/aws_lambda_powertools/logging/logger.py index 31405ff4e26..6ea085d5808 100644 --- a/aws_lambda_powertools/logging/logger.py +++ b/aws_lambda_powertools/logging/logger.py @@ -232,7 +232,8 @@ def __init__( ) self.child = child self.logger_formatter = logger_formatter - self.logger_handler = logger_handler or logging.StreamHandler(stream) + self._stream = stream or sys.stdout + self.logger_handler = logger_handler or logging.StreamHandler(self._stream) self.log_uncaught_exceptions = log_uncaught_exceptions self._is_deduplication_disabled = resolve_truthy_env_var_choice( diff --git a/tests/functional/test_logger.py b/tests/functional/test_logger.py index feb034b5e46..de589b9accc 100644 --- a/tests/functional/test_logger.py +++ b/tests/functional/test_logger.py @@ -945,3 +945,17 @@ def test_logger_log_uncaught_exceptions(service_name, stdout): # THEN it should contain our custom exception hook with a copy of our logger assert isinstance(exception_hook, functools.partial) assert exception_hook.keywords.get("logger") == logger + + +def test_stream_defaults_to_stdout(service_name, capsys): + # GIVEN Logger is initialized without any explicit stream + logger = Logger(service=service_name) + msg = "testing stdout" + + # WHEN logging statements are issued + logger.info(msg) + + # THEN we should default to standard output, not standard error. + # NOTE: we can't assert on capsys.readouterr().err due to a known bug: https://github.com/pytest-dev/pytest/issues/5997 + log = json.loads(capsys.readouterr().out.strip()) + assert log["message"] == msg