Compare commits
1
Commits
0f819e649d
...
v0.1.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7d6d298d1e |
+1
-1
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "utils"
|
||||
version = "0.1.2"
|
||||
version = "0.1.3"
|
||||
description = "Some hopefully useful utilities to use in everyday coding"
|
||||
readme = "README.md"
|
||||
authors = [
|
||||
|
||||
@@ -72,6 +72,10 @@ class LoggingSettings(BaseSettingsConfig):
|
||||
root_logger = logging.getLogger()
|
||||
root_logger.setLevel(level)
|
||||
|
||||
# Keep Uvicorn's own debug output from following the application's level.
|
||||
for logger_name in ("uvicorn", "uvicorn.error", "uvicorn.access"):
|
||||
logging.getLogger(logger_name).setLevel(logging.INFO)
|
||||
|
||||
# Replace and close existing handlers to avoid duplicate output and resource leaks.
|
||||
for handler in root_logger.handlers[:]:
|
||||
root_logger.removeHandler(handler)
|
||||
|
||||
@@ -13,6 +13,7 @@ from uvicorn.logging import DefaultFormatter
|
||||
from utils.logging_config import LoggingSettings
|
||||
|
||||
SECONDS_PER_DAY = 24 * 60 * 60
|
||||
UVICORN_LOGGER_NAMES = ("uvicorn", "uvicorn.error", "uvicorn.access")
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -20,6 +21,8 @@ def restore_root_logger() -> Generator[None]:
|
||||
root = logging.getLogger()
|
||||
old_handlers = root.handlers[:]
|
||||
old_level = root.level
|
||||
uvicorn_loggers = [logging.getLogger(name) for name in UVICORN_LOGGER_NAMES]
|
||||
old_uvicorn_levels = [logger.level for logger in uvicorn_loggers]
|
||||
for handler in old_handlers:
|
||||
root.removeHandler(handler)
|
||||
|
||||
@@ -32,6 +35,8 @@ def restore_root_logger() -> Generator[None]:
|
||||
for handler in old_handlers:
|
||||
root.addHandler(handler)
|
||||
root.setLevel(old_level)
|
||||
for logger, level in zip(uvicorn_loggers, old_uvicorn_levels):
|
||||
logger.setLevel(level)
|
||||
|
||||
|
||||
def test_sets_valid_log_level(restore_root_logger: None) -> None:
|
||||
@@ -40,6 +45,16 @@ def test_sets_valid_log_level(restore_root_logger: None) -> None:
|
||||
assert logging.getLogger().level == logging.DEBUG
|
||||
|
||||
|
||||
def test_keeps_uvicorn_loggers_at_info_with_debug_root(
|
||||
restore_root_logger: None,
|
||||
) -> None:
|
||||
LoggingSettings(LOG_LEVEL="DEBUG", LOG_TO_FILE=False)
|
||||
|
||||
assert all(
|
||||
logging.getLogger(name).level == logging.INFO for name in UVICORN_LOGGER_NAMES
|
||||
)
|
||||
|
||||
|
||||
def test_invalid_log_level_falls_back_to_info(restore_root_logger: None) -> None:
|
||||
with patch("utils.logging_config.logger.error") as log_error:
|
||||
LoggingSettings(LOG_LEVEL="NOT_A_LEVEL", LOG_TO_FILE=False)
|
||||
|
||||
Reference in New Issue
Block a user