import asyncio import logging import os from nio import HttpClient, MatrixRoom, RoomMessageText class MatrixHandler(logging.Handler): def __init__(self): super().__init__() self.homeserver_address = os.getenv('MATRIX_HOMESERVER_ADDRESS'), self.user_id = os.getenv('MATRIX_USER_ID'), self.user_password = os.getenv('MATRIX_USER_PASSWORD'), self.room_id = os.getenv('MATRIX_ROOM_ID') self.client = HttpClient(self.address, self.user_id) self.client.add_event_callback(self.message_callback, RoomMessageText) self.client.login(self.user_password) def message_callback(self, room: MatrixRoom, event: RoomMessageText) -> None: return def emit(self, record): self.client.room_send( self.room_id, message_type='m.room.message', content={'msgtype': 'm.text', 'body': record} ) class MatrixLogger: def __init__(self, name): self.log = logging.getLogger(name) self.log.setLevel(os.getenv('LOG_LEVEL', 'INFO')) console_handler = logging.StreamHandler() console_handler.setLevel(os.getenv('LOG_LEVEL', 'INFO')) console_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %{name}s - %(message)s')) matrix_handler = MatrixHandler() matrix_handler.setLevel(os.getenv('LOG_LEVEL', 'INFO')) matrix_handler.setFormatter(logging.Formatter('%(levelname)s - %{name}s - %(message)s')) self.log.addHandler(console_handler) self.log.addHandler(matrix_handler) def debug(self, message): self.log.debug(message) def info(self, message): self.log.info(message) def warning(self, message): self.log.warning(message) def error(self, message): self.log.error(message) def critical(self, message): self.log.critical(message)