2025-01-05 14:41:07 +01:00
|
|
|
"""Settings for logging.
|
|
|
|
|
|
|
|
|
|
Kept in an extra module to avoid cyclic dependencies on package import.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
import logging
|
|
|
|
|
from typing import Optional
|
|
|
|
|
|
|
|
|
|
from pydantic import Field, computed_field, field_validator
|
|
|
|
|
|
|
|
|
|
from akkudoktoreos.config.configabc import SettingsBaseModel
|
|
|
|
|
from akkudoktoreos.core.logabc import logging_str_to_level
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LoggingCommonSettings(SettingsBaseModel):
|
2025-01-15 00:54:45 +01:00
|
|
|
"""Logging Configuration."""
|
2025-01-05 14:41:07 +01:00
|
|
|
|
2025-01-18 14:26:34 +01:00
|
|
|
level: Optional[str] = Field(
|
2025-01-15 00:54:45 +01:00
|
|
|
default=None,
|
|
|
|
|
description="EOS default logging level.",
|
|
|
|
|
examples=["INFO", "DEBUG", "WARNING", "ERROR", "CRITICAL"],
|
2025-01-05 14:41:07 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# Validators
|
2025-01-18 14:26:34 +01:00
|
|
|
@field_validator("level", mode="after")
|
2025-01-05 14:41:07 +01:00
|
|
|
@classmethod
|
|
|
|
|
def set_default_logging_level(cls, value: Optional[str]) -> Optional[str]:
|
|
|
|
|
if isinstance(value, str) and value.upper() == "NONE":
|
|
|
|
|
value = None
|
|
|
|
|
if value is None:
|
|
|
|
|
return None
|
|
|
|
|
level = logging_str_to_level(value)
|
|
|
|
|
logging.getLogger().setLevel(level)
|
|
|
|
|
return value
|
|
|
|
|
|
|
|
|
|
# Computed fields
|
|
|
|
|
@computed_field # type: ignore[prop-decorator]
|
|
|
|
|
@property
|
2025-01-18 14:26:34 +01:00
|
|
|
def root_level(self) -> str:
|
2025-01-05 14:41:07 +01:00
|
|
|
"""Root logger logging level."""
|
|
|
|
|
level = logging.getLogger().getEffectiveLevel()
|
|
|
|
|
level_name = logging.getLevelName(level)
|
|
|
|
|
return level_name
|