diff --git a/conda_build/utils.py b/conda_build/utils.py index 085d15a6a0..49b95b7ca1 100644 --- a/conda_build/utils.py +++ b/conda_build/utils.py @@ -1710,6 +1710,7 @@ def filter(self, record): dedupe_filter = DuplicateFilter() info_debug_stdout_filter = LessThanFilter(logging.WARNING) warning_error_stderr_filter = GreaterThanFilter(logging.INFO) +level_formatter = logging.Formatter("%(levelname)s: %(message)s") # set filelock's logger to only show warnings by default logging.getLogger("filelock").setLevel(logging.WARN) @@ -1746,11 +1747,17 @@ def get_logger(name, level=logging.INFO, dedupe=True, add_stdout_stderr_handlers log.addFilter(dedupe_filter) # these are defaults. They can be overridden by configuring a log config yaml file. - if not log.handlers and add_stdout_stderr_handlers: + top_pkg = name.split(".")[0] + if top_pkg == "conda_build": + # we don't want propagation in CLI, but we do want it in tests + # this is a pytest limitation: https://github.com/pytest-dev/pytest/issues/3697 + logging.getLogger(top_pkg).propagate = "PYTEST_CURRENT_TEST" in os.environ + if add_stdout_stderr_handlers and not log.handlers: stdout_handler = logging.StreamHandler(sys.stdout) stderr_handler = logging.StreamHandler(sys.stderr) stdout_handler.addFilter(info_debug_stdout_filter) stderr_handler.addFilter(warning_error_stderr_filter) + stderr_handler.setFormatter(level_formatter) stdout_handler.setLevel(level) stderr_handler.setLevel(level) log.addHandler(stdout_handler) diff --git a/news/4903-duplicate-logging b/news/4903-duplicate-logging new file mode 100644 index 0000000000..6ce91b269f --- /dev/null +++ b/news/4903-duplicate-logging @@ -0,0 +1,19 @@ +### Enhancements + +* + +### Bug fixes + +* Avoid duplicate logging by not propagating the top-level conda-build logger. (#4903) + +### Deprecations + +* + +### Docs + +* + +### Other + +*