fix: scope log filenames by service under root logs dir
This commit is contained in:
@@ -4,7 +4,7 @@ from pathlib import Path
|
||||
from typing import ClassVar, Literal
|
||||
from urllib.parse import quote
|
||||
|
||||
from pydantic import BaseModel, Field, computed_field, field_validator
|
||||
from pydantic import BaseModel, Field, computed_field, field_validator, model_validator
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
|
||||
@@ -21,8 +21,8 @@ class RuntimeSettings(BaseModel):
|
||||
log_rotation_max_bytes: int = 10_000_000
|
||||
log_dir: str = "logs"
|
||||
log_error_dir: str = "logs/errors"
|
||||
log_file_name: str = "app.log"
|
||||
log_error_file_name: str = "error.log"
|
||||
log_file_name: str = ""
|
||||
log_error_file_name: str = ""
|
||||
log_sensitive_fields: list[str] = Field(
|
||||
default_factory=lambda: [
|
||||
"password",
|
||||
@@ -47,15 +47,20 @@ class RuntimeSettings(BaseModel):
|
||||
def lock_log_error_dir(cls, _: object) -> str:
|
||||
return "logs/errors"
|
||||
|
||||
@field_validator("log_file_name", mode="before")
|
||||
@classmethod
|
||||
def lock_log_file_name(cls, _: object) -> str:
|
||||
return "app.log"
|
||||
@model_validator(mode="after")
|
||||
def ensure_service_scoped_log_file_names(self) -> "RuntimeSettings":
|
||||
service = "".join(
|
||||
char if char.isalnum() or char in {"-", "_"} else "-"
|
||||
for char in self.service_name
|
||||
).strip("-_")
|
||||
service_name = service or "app"
|
||||
|
||||
@field_validator("log_error_file_name", mode="before")
|
||||
@classmethod
|
||||
def lock_log_error_file_name(cls, _: object) -> str:
|
||||
return "error.log"
|
||||
if not self.log_file_name.strip():
|
||||
self.log_file_name = f"{service_name}.log"
|
||||
if not self.log_error_file_name.strip():
|
||||
self.log_error_file_name = f"{service_name}.error.log"
|
||||
|
||||
return self
|
||||
|
||||
|
||||
class CelerySettings(BaseModel):
|
||||
|
||||
Reference in New Issue
Block a user