|
import logging |
|
import json |
|
from datetime import datetime |
|
from typing import Any, Dict |
|
from pathlib import Path |
|
|
|
class TheryBotLogger: |
|
def __init__(self, log_dir: Path = Path("logs")): |
|
self.log_dir = log_dir |
|
self._setup_logging() |
|
|
|
def _setup_logging(self) -> None: |
|
self.log_dir.mkdir(parents=True, exist_ok=True) |
|
|
|
|
|
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) |
|
|
|
|
|
file_formatter = logging.Formatter( |
|
'%(asctime)s - %(name)s - %(levelname)s - %(message)s' |
|
) |
|
console_formatter = logging.Formatter( |
|
'%(levelname)s: %(message)s' |
|
) |
|
|
|
file_handler.setFormatter(file_formatter) |
|
console_handler.setFormatter(console_formatter) |
|
|
|
|
|
logging.root.setLevel(logging.INFO) |
|
logging.root.addHandler(file_handler) |
|
logging.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)) |