Files
guarddog-nexus/guarddog_nexus/logging_setup.py

44 lines
1.2 KiB
Python

"""Structured logging with syslog support."""
import json
import logging
import sys
from logging.handlers import SysLogHandler
from guarddog_nexus.config import config
class JsonFormatter(logging.Formatter):
def format(self, record: logging.LogRecord) -> str:
payload = {
"timestamp": self.formatTime(record, self.datefmt),
"level": record.levelname,
"logger": record.name,
"message": record.getMessage(),
}
if record.exc_info and record.exc_info[1]:
payload["exception"] = str(record.exc_info[1])
return json.dumps(payload, ensure_ascii=False)
def setup_logging() -> logging.Logger:
logger = logging.getLogger("guarddog_nexus")
logger.setLevel(config.log_level.upper())
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setFormatter(JsonFormatter())
logger.addHandler(stdout_handler)
if config.log_syslog_host:
syslog_handler = SysLogHandler(
address=(config.log_syslog_host, config.log_syslog_port),
facility=SysLogHandler.LOG_LOCAL0,
)
syslog_handler.setFormatter(JsonFormatter())
logger.addHandler(syslog_handler)
return logger
log = setup_logging()