melayumate-fastapi-ml / logging_config.py
Master
Add application file
0c527d5
import logging
#from main import trace_id_var # Import the context variable from your main file
import main
# 1. Create a custom filter to inject the traceId
class TraceIdFilter(logging.Filter):
"""
A logging filter that injects the traceId from a context variable
into the log record.
"""
def filter(self, record):
# Get the traceId from the context variable and add it to the log record
record.traceId = main.trace_id_var.get()
return True
# 2. Define the dictionary-based logging configuration
LOGGING_CONFIG = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"default": {
# The magic happens here: we use the custom attribute '%(traceId)s'
"format": "%(asctime)s [%(traceId)s] %(levelname)-8s [%(threadName)s] %(name)s:%(lineno)d - %(message)s",
"datefmt": "%Y-%m-%d %H:%M:%S",
},
# Add a new formatter specifically for colored console output
"colored": {
# Use the special formatter class from colorlog
"()": "colorlog.ColoredFormatter",
# Add color codes to the format string
"format": "%(asctime)s [%(traceId)s] %(log_color)s%(levelname)-8s%(reset)s [%(threadName)s] %(name)s:%(lineno)d - %(message)s",
"datefmt": "%Y-%m-%d %H:%M:%S"
}
},
"filters": {
# Register our custom filter
"trace_id_filter": {
"()": TraceIdFilter,
},
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"formatter": "colored",
"filters": ["trace_id_filter"], # Attach the filter to the handler
"stream": "ext://sys.stdout",
},
},
"root": {
"level": "INFO",
"handlers": ["console"],
},
"loggers": {
# Configure uvicorn loggers to use our format
"uvicorn": {"handlers": ["console"], "level": "INFO", "propagate": False},
"uvicorn.error": {"level": "INFO"},
"uvicorn.access": {"handlers": ["console"], "level": "INFO", "propagate": False},
"hypercorn": {"handlers": ["console"], "level": "INFO", "propagate": False},
"hypercorn.access": {"handlers": ["console"], "level": "INFO", "propagate": False}
}
}