Kaito117's picture
fixed lots of validation bugs in scoring
c556cb0
import logging
from app.config import settings
class ExtraFormatter(logging.Formatter):
"""Custom formatter that includes extra fields"""
def format(self, record):
# Get the basic formatted message
formatted = super().format(record)
# Add extra fields if they exist
if hasattr(record, '__dict__'):
extra_fields = {}
for key, value in record.__dict__.items():
# Skip standard logging fields
if key not in ['name', 'msg', 'args', 'levelname', 'levelno', 'pathname',
'filename', 'module', 'exc_info', 'exc_text', 'stack_info',
'lineno', 'funcName', 'created', 'msecs', 'relativeCreated',
'thread', 'threadName', 'processName', 'process', 'message',
'asctime']:
extra_fields[key] = value
if extra_fields:
extra_str = " | ".join([f"{k}={v}" for k, v in extra_fields.items()])
formatted = f"{formatted} | {extra_str}"
return formatted
def setup_logger() -> logging.Logger:
"""Setup logging configuration using standard logging"""
logger = logging.getLogger("app")
# can add different log levels, one global, then separate for file and stream
stream_handler = logging.StreamHandler()
file_handler = logging.FileHandler(settings.log_filename, mode="w")
formatter = ExtraFormatter(
fmt="%(asctime)s | %(filename)s:%(lineno)d | %(levelname)s | %(name)s | %(message)s"
)
logger.setLevel(settings.log_level)
stream_handler.setFormatter(formatter)
stream_handler.setLevel(settings.log_level)
file_handler.setFormatter(formatter)
file_handler.setLevel(settings.log_level)
logger.addHandler(stream_handler)
logger.addHandler(file_handler)
return logger
logger = setup_logger()