feat: guarddog-nexus — webhook-based PyPI scanner with web UI
This commit is contained in:
43
guarddog_nexus/logging_setup.py
Normal file
43
guarddog_nexus/logging_setup.py
Normal file
@@ -0,0 +1,43 @@
|
||||
"""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()
|
||||
Reference in New Issue
Block a user