Source code for openfactory.logging.backends.loki
"""
Loki logging backend for OpenFactory.
"""
import logging
from pathlib import Path
from openfactory.logging.formatters import JsonFormatter, PrefixFormatter
[docs]
class LokiLoggerBackend:
""" Logging backend for Grafana Loki. """
[docs]
@staticmethod
def configure(logger: logging.Logger, level: int, prefix: str, text_log_directory: str | None) -> None:
"""
Configure a logger for the Grafana Loki logging backend.
Args:
logger (logging.Logger): Logger to configure.
level (int): Logging level.
prefix (str): Prefix for human-readable log messages.
text_log_directory (str | None): Directory where human-readable
log files are written. If ``None``, the default directory is used.
"""
logger.setLevel(level)
if logger.handlers:
return
# JSON logs -> stdout
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(JsonFormatter())
logger.addHandler(stream_handler)
# Human-readable logs -> file
log_directory = Path(text_log_directory or ".")
log_directory.mkdir(parents=True, exist_ok=True)
file_handler = logging.FileHandler(log_directory / f"{logger.name}.log")
file_handler.setFormatter(PrefixFormatter(prefix))
logger.addHandler(file_handler)
logger.propagate = False