Files
Django_kube/django_code/apps/netdata_logging/logger.py
T
pi-ux-ce 2e5e3b0a26
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
trying the netdata logging
2026-08-03 14:22:48 +01:00

45 lines
1.4 KiB
Python

"""
Structured logging helper for Netdata.
Netdata does not expose a generic "push a log line" API reachable with
just a room token from outside an Agent (see credentials.py). Until a
real push mechanism (StatsD or an OpenTelemetry log receiver) is
confirmed enabled on the agent, the supported path is the standard one:
emit structured JSON lines to stdout, which Netdata's log collectors
(systemd-journal / generic log source) are built to tail and parse.
"""
import logging
import sys
from pythonjsonlogger import jsonlogger
from .credentials import netdata
_LOGGER_NAME = "netdata"
def get_netdata_logger() -> logging.Logger:
logger = logging.getLogger(_LOGGER_NAME)
if not logger.handlers:
handler = logging.StreamHandler(stream=sys.stdout)
handler.setFormatter(
jsonlogger.JsonFormatter("%(asctime)s %(levelname)s %(name)s %(message)s")
)
logger.addHandler(handler)
logger.setLevel(logging.INFO)
logger.propagate = False
return logger
def log_event(message, level="info", **fields):
"""Log a structured event intended to be picked up by Netdata.
Extra keyword arguments are attached as structured fields on the JSON
log line, e.g. log_event("hello world", source="netdata_logging.hello").
"""
logger = get_netdata_logger()
log_fn = getattr(logger, level.lower(), logger.info)
log_fn(message, extra={"netdata_agent_host": netdata.agent_host, **fields})