Warning/error logging: be explicit in how the stacklevel variable is handled

This commit is contained in:
MinchinWeb 2024-01-27 10:47:54 -07:00
commit f1f2ceccc7

View file

@ -85,19 +85,39 @@ class FatalLogger(LimitLogger):
warnings_fatal = False warnings_fatal = False
errors_fatal = False errors_fatal = False
# adding `stacklevel=2` means that the displayed filename and line number def warning(self, *args, stacklevel=1, **kwargs):
# will match the "original" calling location, rather than the wrapper here """
def warning(self, *args, **kwargs): Displays a logging warning.
if "stacklevel" not in kwargs.keys():
kwargs["stacklevel"] = 2 Wrapping it here allows Pelican to filter warnings, and conditionally
super().warning(*args, **kwargs) make warnings fatal.
Args:
stacklevel (int): the stacklevel that would be used to display the
calling location, except for this function. Adjusting the
stacklevel allows you to see the "true" calling location of the
warning, rather than this wrapper location.
"""
stacklevel += 1
super().warning(*args, stacklevel=stacklevel, **kwargs)
if FatalLogger.warnings_fatal: if FatalLogger.warnings_fatal:
raise RuntimeError("Warning encountered") raise RuntimeError("Warning encountered")
def error(self, *args, **kwargs): def error(self, *args, stacklevel=1, **kwargs):
if "stacklevel" not in kwargs.keys(): """
kwargs["stacklevel"] = 2 Displays a logging error.
super().error(*args, **kwargs)
Wrapping it here allows Pelican to filter errors, and conditionally
make errors non-fatal.
Args:
stacklevel (int): the stacklevel that would be used to display the
calling location, except for this function. Adjusting the
stacklevel allows you to see the "true" calling location of the
error, rather than this wrapper location.
"""
stacklevel += 1
super().error(*args, stacklevel=stacklevel, **kwargs)
if FatalLogger.errors_fatal: if FatalLogger.errors_fatal:
raise RuntimeError("Error encountered") raise RuntimeError("Error encountered")