31 lines
877 B
Python
31 lines
877 B
Python
from datetime import datetime
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
|
|
from pydantic import BaseModel, ConfigDict
|
|
|
|
|
|
class LoggingConfig(BaseModel):
|
|
model_config = ConfigDict(extra="forbid", validate_assignment=True)
|
|
|
|
initialize: bool = True
|
|
file_path: Optional[str] = None
|
|
file_dir: Optional[str] = None
|
|
file_name_pattern: Optional[str] = None
|
|
level: int = 20
|
|
suppress_node_logs: bool = True
|
|
|
|
|
|
def resolve_log_file_path(cfg: LoggingConfig) -> Optional[str]:
|
|
if cfg.file_path:
|
|
return cfg.file_path
|
|
if not cfg.file_dir:
|
|
return None
|
|
|
|
pattern = cfg.file_name_pattern or "pipeline_{timestamp}.log"
|
|
ts = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
filename = pattern.replace("{timestamp}", ts)
|
|
log_dir = Path(cfg.file_dir)
|
|
log_dir.mkdir(parents=True, exist_ok=True)
|
|
return str(log_dir / filename)
|