56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
import asyncio
|
|
import logging
|
|
|
|
from nio import AsyncClient, MatrixRoom, RoomMessageText
|
|
|
|
class MatrixHandler(logging.Handler):
|
|
def __init__(self, url, user_id, user_password, room_id):
|
|
super().__init__()
|
|
self.client = AsyncClient(url, user_id)
|
|
self.room_id = room_id
|
|
self.client.add_event_callback(self.message_callback, RoomMessageText)
|
|
await self.client.login(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.logger = logging.getLogger(name)
|
|
self.logger.setLevel(logging.DEBUG)
|
|
|
|
console_handler = logging.StreamHandler()
|
|
console_handler.setLevel(logging.DEBUG)
|
|
console_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
|
|
|
|
|
|
matrix_handler = MatrixHandler(room_id)
|
|
matrix_handler.setLevel(logging.INFO)
|
|
matrix_handler.setFormatter(logging.Formatter('%(levelname)s - %(message)s'))
|
|
|
|
self.logger.addHandler(console_handler)
|
|
self.logger.addHandler(matrix_handler)
|
|
|
|
def debug(self, message):
|
|
self.logger.debug(message)
|
|
|
|
def info(self, message):
|
|
self.logger.info(message)
|
|
|
|
def warning(self, message):
|
|
self.logger.warning(message)
|
|
|
|
def error(self, message):
|
|
self.logger.error(message)
|
|
|
|
def critical(self, message):
|
|
self.logger.critical(message)
|
|
|