Spaces:
Paused
Paused
| """ | |
| FC Debug Log Formatters. | |
| Provides consistent formatting for FC debug logs with timestamps, | |
| log levels, and proper structure. | |
| """ | |
| import logging | |
| from datetime import datetime | |
| from zoneinfo import ZoneInfo | |
| class FCDebugFormatter(logging.Formatter): | |
| """ | |
| Formatter for FC debug logs. | |
| Format: YYYY-MM-DD HH:MM:SS.mmm | LEVEL | message | |
| Uses America/Chicago timezone for consistency with existing Grid Logger. | |
| """ | |
| def __init__(self) -> None: | |
| super().__init__() | |
| try: | |
| self._tz = ZoneInfo("America/Chicago") | |
| except Exception: | |
| # Fallback to UTC if timezone not available | |
| self._tz = ZoneInfo("UTC") | |
| def format(self, record: logging.LogRecord) -> str: | |
| """Format the log record.""" | |
| # Timestamp with milliseconds | |
| dt = datetime.fromtimestamp(record.created, tz=self._tz) | |
| timestamp = dt.strftime("%Y-%m-%d %H:%M:%S") + f".{int(record.msecs):03d}" | |
| # Level name padded to 7 chars | |
| level = record.levelname.ljust(7) | |
| # Message | |
| message = record.getMessage() | |
| # Base format | |
| formatted = f"{timestamp} | {level} | {message}" | |
| # Add exception info if present | |
| if record.exc_info: | |
| exc_text = self.formatException(record.exc_info) | |
| formatted += f"\n{exc_text}" | |
| return formatted | |