Skip to content

Commit

Permalink
fix(main): Don't call logging too early (#4595)
Browse files Browse the repository at this point in the history
A deprecate log was called before logging was set up.
  • Loading branch information
holmanb authored Nov 27, 2023
1 parent f5b0bad commit fddde81
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 11 deletions.
17 changes: 12 additions & 5 deletions cloudinit/cmd/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
setup_logging,
reset_logging,
configure_root_logger,
DEPRECATED,
)
from cloudinit.reporting import events
from cloudinit.safeyaml import load
Expand Down Expand Up @@ -221,11 +222,17 @@ def attempt_cmdline_url(path, network=True, cmdline=None) -> Tuple[int, str]:
is_cloud_cfg = False
if is_cloud_cfg:
if cmdline_name == "url":
util.deprecate(
deprecated="The kernel command line key `url`",
deprecated_version="22.3",
extra_message=" Please use `cloud-config-url` "
"kernel command line parameter instead",
return (
DEPRECATED,
str(
util.deprecate(
deprecated="The kernel command line key `url`",
deprecated_version="22.3",
extra_message=" Please use `cloud-config-url` "
"kernel command line parameter instead",
return_log=True,
),
),
)
else:
if cmdline_name == "cloud-config-url":
Expand Down
3 changes: 2 additions & 1 deletion cloudinit/log.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from typing import DefaultDict

DEFAULT_LOG_FORMAT = "%(asctime)s - %(filename)s[%(levelname)s]: %(message)s"
DEPRECATED = 35


def setup_basic_logging(level=logging.DEBUG, formatter=None):
Expand All @@ -44,7 +45,7 @@ def flush_loggers(root):
flush_loggers(root.parent)


def define_deprecation_logger(lvl=35):
def define_deprecation_logger(lvl=DEPRECATED):
logging.addLevelName(lvl, "DEPRECATED")

def deprecated(self, message, *args, **kwargs):
Expand Down
15 changes: 10 additions & 5 deletions cloudinit/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -3233,6 +3233,7 @@ def deprecate(
deprecated_version: str,
extra_message: Optional[str] = None,
schedule: int = 5,
return_log: bool = False,
):
"""Mark a "thing" as deprecated. Deduplicated deprecations are
logged.
Expand All @@ -3249,6 +3250,8 @@ def deprecate(
@param schedule: Manually set the deprecation schedule. Defaults to
5 years. Leave a comment explaining your reason for deviation if
setting this value.
@param return_log: Return log text rather than logging it. Useful for
running prior to logging setup.
Note: uses keyword-only arguments to improve legibility
"""
Expand All @@ -3258,13 +3261,15 @@ def deprecate(
dedup = hash(deprecated + message + deprecated_version + str(schedule))
version = Version.from_str(deprecated_version)
version_removed = Version(version.major + schedule, version.minor)
deprecate_msg = (
f"{deprecated} is deprecated in "
f"{deprecated_version} and scheduled to be removed in "
f"{version_removed}. {message}"
).rstrip()
if return_log:
return deprecate_msg
if dedup not in deprecate._log: # type: ignore
deprecate._log.add(dedup) # type: ignore
deprecate_msg = (
f"{deprecated} is deprecated in "
f"{deprecated_version} and scheduled to be removed in "
f"{version_removed}. {message}"
).rstrip()
if hasattr(LOG, "deprecated"):
LOG.deprecated(deprecate_msg) # type: ignore
else:
Expand Down

0 comments on commit fddde81

Please sign in to comment.