diff --git a/cosmos/__init__.py b/cosmos/__init__.py index 100649bfbe..555f97e064 100644 --- a/cosmos/__init__.py +++ b/cosmos/__init__.py @@ -30,7 +30,7 @@ DbtTestLocalOperator, ) -logger = get_logger() +logger = get_logger(__name__) try: from cosmos.operators.docker import ( diff --git a/cosmos/cache.py b/cosmos/cache.py index 1e0b341f07..563c4fd703 100644 --- a/cosmos/cache.py +++ b/cosmos/cache.py @@ -12,7 +12,7 @@ from cosmos.dbt.project import get_partial_parse_path from cosmos.log import get_logger -logger = get_logger() +logger = get_logger(__name__) # It was considered to create a cache identifier based on the dbt project path, as opposed diff --git a/cosmos/dbt/project.py b/cosmos/dbt/project.py index d8750cd442..987d10f3a6 100644 --- a/cosmos/dbt/project.py +++ b/cosmos/dbt/project.py @@ -13,7 +13,7 @@ ) from cosmos.log import get_logger -logger = get_logger() +logger = get_logger(__name__) def has_non_empty_dependencies_file(project_path: Path) -> bool: diff --git a/cosmos/log.py b/cosmos/log.py index 3294ac5b7c..3522b09dd0 100644 --- a/cosmos/log.py +++ b/cosmos/log.py @@ -14,8 +14,10 @@ "%(log_color)s%(message)s%(reset)s" ) +LOGGER_NAME_TEMPLATE = "astronomer-cosmos-{}" -def get_logger(name: str | None = None) -> logging.Logger: + +def get_logger(name: str) -> logging.Logger: """ Get custom Astronomer cosmos logger. @@ -25,7 +27,7 @@ def get_logger(name: str | None = None) -> logging.Logger: By using this logger, we introduce a (yellow) astronomer-cosmos string into the project's log messages: [2023-08-09T14:20:55.532+0100] {subprocess.py:94} INFO - (astronomer-cosmos) - 13:20:55 Completed successfully """ - logger = logging.getLogger(name) + logger = logging.getLogger(LOGGER_NAME_TEMPLATE.format(name)) formatter: logging.Formatter = CustomTTYColoredFormatter(fmt=LOG_FORMAT) # type: ignore handler = logging.StreamHandler() handler.setFormatter(formatter) diff --git a/tests/test_log.py b/tests/test_log.py index 75676d1ec6..c4f8b4bc11 100644 --- a/tests/test_log.py +++ b/tests/test_log.py @@ -1,5 +1,7 @@ import logging +import pytest + from cosmos import get_provider_info from cosmos.log import get_logger @@ -14,6 +16,19 @@ def test_get_logger(): assert custom_logger.handlers[0].formatter.__class__.__name__ == "CustomTTYColoredFormatter" assert custom_string in custom_logger.handlers[0].formatter._fmt + with pytest.raises(TypeError): + # Ensure that the get_logger signature is not changed in the future + # and name is still a required parameter + custom_logger = get_logger() # noqa + + # Explicitly ensure that even if we pass None or empty string + # we will not get root logger in any case + custom_logger = get_logger("") + assert custom_logger.name != "" + + custom_logger = get_logger(None) # noqa + assert custom_logger.name != "" + def test_propagate_logs_conf(monkeypatch): monkeypatch.setattr("cosmos.log.propagate_logs", False)