77 lines
2.5 KiB
Python
77 lines
2.5 KiB
Python
|
|
"""
|
||
|
|
Centralized logging configuration for microservices
|
||
|
|
"""
|
||
|
|
|
||
|
|
import logging
|
||
|
|
import logging.config
|
||
|
|
import os
|
||
|
|
from typing import Dict, Any
|
||
|
|
|
||
|
|
def setup_logging(service_name: str, log_level: str = "INFO") -> None:
|
||
|
|
"""Set up logging configuration for a microservice"""
|
||
|
|
|
||
|
|
config: Dict[str, Any] = {
|
||
|
|
"version": 1,
|
||
|
|
"disable_existing_loggers": False,
|
||
|
|
"formatters": {
|
||
|
|
"standard": {
|
||
|
|
"format": "%(asctime)s [%(levelname)s] %(name)s: %(message)s"
|
||
|
|
},
|
||
|
|
"detailed": {
|
||
|
|
"format": "%(asctime)s [%(levelname)s] %(name)s [%(filename)s:%(lineno)d] %(message)s"
|
||
|
|
},
|
||
|
|
"json": {
|
||
|
|
"()": "pythonjsonlogger.jsonlogger.JsonFormatter",
|
||
|
|
"format": "%(asctime)s %(name)s %(levelname)s %(message)s"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"handlers": {
|
||
|
|
"console": {
|
||
|
|
"class": "logging.StreamHandler",
|
||
|
|
"level": log_level,
|
||
|
|
"formatter": "standard",
|
||
|
|
"stream": "ext://sys.stdout"
|
||
|
|
},
|
||
|
|
"file": {
|
||
|
|
"class": "logging.FileHandler",
|
||
|
|
"level": log_level,
|
||
|
|
"formatter": "detailed",
|
||
|
|
"filename": f"/var/log/{service_name}.log",
|
||
|
|
"mode": "a"
|
||
|
|
},
|
||
|
|
"logstash": {
|
||
|
|
"class": "logstash.TCPLogstashHandler",
|
||
|
|
"host": os.getenv("LOGSTASH_HOST", "localhost"),
|
||
|
|
"port": int(os.getenv("LOGSTASH_PORT", "5000")),
|
||
|
|
"version": 1,
|
||
|
|
"message_type": "logstash",
|
||
|
|
"fqdn": False,
|
||
|
|
"tags": [service_name]
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"loggers": {
|
||
|
|
"": {
|
||
|
|
"handlers": ["console", "file"],
|
||
|
|
"level": log_level,
|
||
|
|
"propagate": False
|
||
|
|
},
|
||
|
|
"uvicorn": {
|
||
|
|
"handlers": ["console"],
|
||
|
|
"level": log_level,
|
||
|
|
"propagate": False
|
||
|
|
},
|
||
|
|
"uvicorn.access": {
|
||
|
|
"handlers": ["console"],
|
||
|
|
"level": log_level,
|
||
|
|
"propagate": False
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Add logstash handler if in production
|
||
|
|
if os.getenv("ENVIRONMENT") == "production":
|
||
|
|
config["loggers"][""]["handlers"].append("logstash")
|
||
|
|
|
||
|
|
logging.config.dictConfig(config)
|
||
|
|
logger = logging.getLogger(__name__)
|
||
|
|
logger.info(f"Logging configured for {service_name}")
|