Try to make log collector thread safe
This commit is contained in:
parent
92bfe37436
commit
8409b2a5bb
2 changed files with 7 additions and 5 deletions
|
@ -44,17 +44,17 @@ config.update()
|
||||||
|
|
||||||
logging.config.dictConfig(copy.deepcopy(config["logging"]))
|
logging.config.dictConfig(copy.deepcopy(config["logging"]))
|
||||||
|
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
|
||||||
stop_log_listener = None
|
stop_log_listener = None
|
||||||
if config["api_features.log"]:
|
if config["api_features.log"]:
|
||||||
from .management.api.log import init as init_log_listener, stop_all as stop_log_listener
|
from .management.api.log import init as init_log_listener, stop_all as stop_log_listener
|
||||||
|
|
||||||
init_log_listener()
|
init_log_listener(loop)
|
||||||
|
|
||||||
log = logging.getLogger("maubot.init")
|
log = logging.getLogger("maubot.init")
|
||||||
log.info(f"Initializing maubot {__version__}")
|
log.info(f"Initializing maubot {__version__}")
|
||||||
|
|
||||||
loop = asyncio.get_event_loop()
|
|
||||||
|
|
||||||
init_zip_loader(config)
|
init_zip_loader(config)
|
||||||
db_engine = init_db(config)
|
db_engine = init_db(config)
|
||||||
clients = init_client_class(loop)
|
clients = init_client_class(loop)
|
||||||
|
|
|
@ -38,6 +38,7 @@ class LogCollector(logging.Handler):
|
||||||
lines: Deque[dict]
|
lines: Deque[dict]
|
||||||
formatter: logging.Formatter
|
formatter: logging.Formatter
|
||||||
listeners: List[web.WebSocketResponse]
|
listeners: List[web.WebSocketResponse]
|
||||||
|
loop: asyncio.AbstractEventLoop
|
||||||
|
|
||||||
def __init__(self, level=logging.NOTSET) -> None:
|
def __init__(self, level=logging.NOTSET) -> None:
|
||||||
super().__init__(level)
|
super().__init__(level)
|
||||||
|
@ -69,7 +70,7 @@ class LogCollector(logging.Handler):
|
||||||
for name, value in content.items():
|
for name, value in content.items():
|
||||||
if isinstance(value, datetime):
|
if isinstance(value, datetime):
|
||||||
content[name] = value.astimezone().isoformat()
|
content[name] = value.astimezone().isoformat()
|
||||||
asyncio.ensure_future(self.send(content))
|
asyncio.run_coroutine_threadsafe(self.send(content), loop=self.loop)
|
||||||
self.lines.append(content)
|
self.lines.append(content)
|
||||||
|
|
||||||
async def send(self, record: dict) -> None:
|
async def send(self, record: dict) -> None:
|
||||||
|
@ -86,8 +87,9 @@ log = logging.getLogger("maubot.server.websocket")
|
||||||
sockets = []
|
sockets = []
|
||||||
|
|
||||||
|
|
||||||
def init() -> None:
|
def init(loop: asyncio.AbstractEventLoop) -> None:
|
||||||
log_root.addHandler(handler)
|
log_root.addHandler(handler)
|
||||||
|
handler.loop = loop
|
||||||
|
|
||||||
|
|
||||||
async def stop_all() -> None:
|
async def stop_all() -> None:
|
||||||
|
|
Loading…
Reference in a new issue