-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathloggers.py
47 lines (38 loc) · 1.25 KB
/
loggers.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from typing import List
from queue import SimpleQueue as Queue
import logging, asyncio
class SimpleAdapter(logging.LoggerAdapter):
pass
class LocalQueueHandler(logging.handlers.QueueHandler):
def emit(self, record: logging.LogRecord) -> None:
# Removed the call to self.prepare(), handle task cancellation
try:
self.enqueue(record)
except asyncio.CancelledError:
raise
except Exception:
self.handleError(record)
def setup_logging_queue() -> None:
"""
Move log handlers to a separate thread.
Replace handlers on the root logger with a LocalQueueHandler,
and start a logging.QueueListener holding the original
handlers.
"""
queue: Queue = Queue()
root = logging.getLogger()
handlers: List[logging.Handler] = []
handler = LocalQueueHandler(queue)
root.addHandler(handler)
for h in root.handlers[:]:
if h is not handler:
root.removeHandler(h)
handlers.append(h)
listener = logging.handlers.QueueListener(
queue, *handlers, respect_handler_level=True
)
listener.start()
log = get_logger("feevee")
log.info(f"logging queue ready")
def get_logger(name: str):
return logging.getLogger(name)