kraken-bot/kraken_bot/MatrixLogger.py
Eric Meehan e2034cfa65 Post log messages to Matrix (#6)
Reverted to MyStrategy instead of Cerebro experiments and implemented base functionality for a Matrix logging mechanism.

Reviewed-on: #6
2025-02-09 15:48:04 +00:00

63 lines
2.0 KiB
Python

import asyncio
import logging
import os
from nio import AsyncClient, MatrixRoom, RoomMessageText
class MatrixHandler(logging.Handler):
def __init__(self):
super().__init__()
self.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.device_id = os.getenv('MATRIX_DEVICE_ID')
def message_callback(self, room: MatrixRoom, event: RoomMessageText) -> None:
return
async def send_to_matrix(self, record):
client = AsyncClient(self.address, self.user_id)
await client.login(self.user_password, self.device_id)
client.add_event_callback(self.message_callback, RoomMessageText)
await client.room_send(
self.room_id,
message_type='m.room.message',
content={'msgtype': 'm.text', 'body': self.formatter.format(record)}
)
def emit(self, record):
asyncio.run(self.send_to_matrix(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)