|
1 |
| -import os |
2 | 1 | import logging
|
| 2 | +import os |
3 | 3 |
|
4 | 4 | try:
|
5 |
| - from tqdm.auto import tqdm |
| 5 | + from tqdm import tqdm |
| 6 | + |
6 | 7 |
|
7 | 8 | class TqdmLoggingHandler(logging.Handler):
|
8 |
| - def __init__(self, level=logging.INFO): |
9 |
| - super().__init__(level) |
| 9 | + def __init__(self, fallback_handler: logging.Handler): |
| 10 | + super().__init__() |
| 11 | + self.fallback_handler = fallback_handler |
10 | 12 |
|
11 | 13 | def emit(self, record):
|
12 | 14 | try:
|
13 |
| - msg = self.format(record) |
14 |
| - tqdm.write(msg) |
15 |
| - self.flush() |
| 15 | + # If there are active tqdm progress bars, |
| 16 | + # attempt to not interfere with them. |
| 17 | + if tqdm._instances: |
| 18 | + tqdm.write(self.format(record)) |
| 19 | + else: |
| 20 | + self.fallback_handler.emit(record) |
16 | 21 | except Exception:
|
17 |
| - self.handleError(record) |
| 22 | + self.fallback_handler.emit(record) |
18 | 23 |
|
19 |
| - TQDM_IMPORTED = True |
20 | 24 | except ImportError:
|
21 |
| - # tqdm does not exist before first launch |
22 |
| - # I will import once the UI finishes seting up the enviroment and reloads. |
23 |
| - TQDM_IMPORTED = False |
| 25 | + TqdmLoggingHandler = None |
| 26 | + |
24 | 27 |
|
25 | 28 | def setup_logging(loglevel):
|
26 | 29 | if loglevel is None:
|
27 | 30 | loglevel = os.environ.get("SD_WEBUI_LOG_LEVEL")
|
28 | 31 |
|
29 |
| - loghandlers = [] |
| 32 | + if not loglevel: |
| 33 | + return |
| 34 | + |
| 35 | + if logging.root.handlers: |
| 36 | + # Already configured, do not interfere |
| 37 | + return |
| 38 | + |
| 39 | + if os.environ.get("SD_WEBUI_RICH_LOG"): |
| 40 | + from rich.logging import RichHandler |
| 41 | + handler = RichHandler() |
| 42 | + else: |
| 43 | + handler = logging.StreamHandler() |
| 44 | + |
| 45 | + if TqdmLoggingHandler: |
| 46 | + handler = TqdmLoggingHandler(handler) |
| 47 | + |
| 48 | + formatter = logging.Formatter( |
| 49 | + '%(asctime)s %(levelname)s [%(name)s] %(message)s', |
| 50 | + '%Y-%m-%d %H:%M:%S', |
| 51 | + ) |
30 | 52 |
|
31 |
| - if TQDM_IMPORTED: |
32 |
| - loghandlers.append(TqdmLoggingHandler()) |
| 53 | + handler.setFormatter(formatter) |
33 | 54 |
|
34 |
| - if loglevel: |
35 |
| - log_level = getattr(logging, loglevel.upper(), None) or logging.INFO |
36 |
| - logging.basicConfig( |
37 |
| - level=log_level, |
38 |
| - format='%(asctime)s %(levelname)s [%(name)s] %(message)s', |
39 |
| - datefmt='%Y-%m-%d %H:%M:%S', |
40 |
| - handlers=loghandlers |
41 |
| - ) |
| 55 | + log_level = getattr(logging, loglevel.upper(), None) or logging.INFO |
| 56 | + logging.root.setLevel(log_level) |
| 57 | + logging.root.addHandler(handler) |
0 commit comments