thery.ai / src /llm /utils /logging.py
Testys's picture
feat: new improvements
ac6202c
import logging
import json
from datetime import datetime
from typing import Any, Dict
from pathlib import Path
class TheryBotLogger:
_initialized = False
def __init__(self, log_dir: Path = Path("logs")):
self.log_dir = log_dir
if not TheryBotLogger._initialized:
self._setup_logging()
TheryBotLogger._initialized = True
def _setup_logging(self) -> None:
self.log_dir.mkdir(parents=True, exist_ok=True)
# Only add handlers if the root logger has none yet
root = logging.getLogger()
if root.handlers:
return
file_handler = logging.FileHandler(
self.log_dir / f"thery_bot_{datetime.now():%Y%m%d}.log"
)
file_handler.setLevel(logging.INFO)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.WARNING)
formatter = logging.Formatter(
"%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
file_handler.setFormatter(formatter)
console_handler.setFormatter(logging.Formatter("%(levelname)s: %(message)s"))
root.setLevel(logging.INFO)
root.addHandler(file_handler)
root.addHandler(console_handler)
def log_interaction(
self,
interaction_type: str,
data: Dict[str, Any],
level: int = logging.INFO,
) -> None:
"""Log an interaction with structured data."""
log_entry = {
"timestamp": datetime.now().isoformat(),
"type": interaction_type,
"data": data,
}
logging.log(level, json.dumps(log_entry))