stable-diffusion-webui
58 строк · 1.6 Кб
1import logging
2import os
3
4try:
5from tqdm import tqdm
6
7
8class TqdmLoggingHandler(logging.Handler):
9def __init__(self, fallback_handler: logging.Handler):
10super().__init__()
11self.fallback_handler = fallback_handler
12
13def emit(self, record):
14try:
15# If there are active tqdm progress bars,
16# attempt to not interfere with them.
17if tqdm._instances:
18tqdm.write(self.format(record))
19else:
20self.fallback_handler.emit(record)
21except Exception:
22self.fallback_handler.emit(record)
23
24except ImportError:
25TqdmLoggingHandler = None
26
27
28def setup_logging(loglevel):
29if loglevel is None:
30loglevel = os.environ.get("SD_WEBUI_LOG_LEVEL")
31
32if not loglevel:
33return
34
35if logging.root.handlers:
36# Already configured, do not interfere
37return
38
39formatter = logging.Formatter(
40'%(asctime)s %(levelname)s [%(name)s] %(message)s',
41'%Y-%m-%d %H:%M:%S',
42)
43
44if os.environ.get("SD_WEBUI_RICH_LOG"):
45from rich.logging import RichHandler
46handler = RichHandler()
47else:
48handler = logging.StreamHandler()
49handler.setFormatter(formatter)
50
51if TqdmLoggingHandler:
52handler = TqdmLoggingHandler(handler)
53
54handler.setFormatter(formatter)
55
56log_level = getattr(logging, loglevel.upper(), None) or logging.INFO
57logging.root.setLevel(log_level)
58logging.root.addHandler(handler)
59