import json import logging from logger import get_logger TELEMETRY_LOG_NAME = 'sa-itsi-driftdetection-telemetry' class JsonFormatter(logging.Formatter): def format(self, record): """ Formats the log record as a JSON string. """ log_record = { 'created': f"{record.created:.6f}", # Using a formatted string to match '%(created)f' 'pid': record.process, 'asctime': self.formatTime(record, self.datefmt), 'name': record.name, 'logtype': "telemetry" } # Check if the message is a dictionary and merge it into log_record if isinstance(record.msg, dict): log_record.update(record.msg) else: log_record['message'] = record.getMessage() try: return json.dumps(log_record) except TypeError as e: logging.error(f"Failed to serialize log record to JSON: {e}") return str(log_record) def get_json_logger(formatter=JsonFormatter()): return get_logger( name=TELEMETRY_LOG_NAME, level=logging.INFO, formatter=formatter ) # Set up logger with a custom JSON formatter logger = get_json_logger() def log_telemetry(**kwargs): """ Logs telemetry data directly as a dictionary at the info level. """ logger.info(kwargs) # Pass dictionary directly to logger