|
3 | 3 | """Starts logging for Vanilla Installer.""" |
4 | 4 | import logging |
5 | 5 | import logging.handlers # pylance moment |
6 | | -import pathlib |
| 6 | +from pathlib import Path |
| 7 | +import sys |
| 8 | + |
| 9 | + |
| 10 | +class LoggerWriter: |
| 11 | + def __init__(self, logfct): |
| 12 | + self.logfct = logfct |
| 13 | + self.buf = [] |
| 14 | + |
| 15 | + def write(self, msg): |
| 16 | + if msg.endswith('\n'): |
| 17 | + self.buf.append(msg.removesuffix('\n')) |
| 18 | + self.logfct(''.join(self.buf)) |
| 19 | + self.buf = [] |
| 20 | + else: |
| 21 | + self.buf.append(msg) |
| 22 | + |
| 23 | + def flush(self): |
| 24 | + pass |
| 25 | + |
7 | 26 |
|
8 | 27 | logger = logging.getLogger() |
9 | 28 | logger.setLevel(logging.DEBUG) |
10 | | -logfile_path = str(pathlib.Path("./logs").resolve() / "vanilla_installer.log") |
11 | | -try: |
12 | | - handler = logging.handlers.RotatingFileHandler( |
13 | | - filename=logfile_path, |
14 | | - encoding="utf-8", |
15 | | - maxBytes=32 * 1024 * 1024, # 32 MiB |
16 | | - backupCount=5, # Rotate through 5 files |
17 | | - ) |
18 | | -except FileNotFoundError: |
19 | | - print("WARNING | Log file not found, creating...") |
20 | | - pathlib.Path("./logs").mkdir(exist_ok=True) |
21 | | - with pathlib.Path("./logs").resolve() / "vanilla_installer.log" as file: |
| 29 | +logfile_path = Path("./logs").resolve() / "vanilla_installer.log" |
| 30 | +if logfile_path.exists() is False: |
| 31 | + Path("./logs").resolve().mkdir(exist_ok=True) |
| 32 | + with logfile_path as file: |
22 | 33 | open(file, "x", encoding="utf-8").write("") |
23 | | - handler = logging.handlers.RotatingFileHandler( |
| 34 | +handler = logging.handlers.RotatingFileHandler( |
24 | 35 | filename=logfile_path, |
25 | 36 | encoding="utf-8", |
26 | 37 | maxBytes=32 * 1024 * 1024, # 32 MiB |
27 | 38 | backupCount=5, # Rotate through 5 files |
28 | 39 | ) |
| 40 | + |
29 | 41 | dt_fmt = "%Y-%m-%d %H:%M:%S" |
30 | 42 | formatter = logging.Formatter( |
31 | 43 | "[{asctime}] [{levelname:<8}] {name}: {message}", dt_fmt, style="{" |
32 | 44 | ) |
33 | 45 | handler.setFormatter(formatter) |
34 | 46 | logger.addHandler(handler) |
35 | 47 |
|
| 48 | +# To access the original stdout/stderr, use sys.__stdout__/sys.__stderr__ |
| 49 | +sys.stdout = LoggerWriter(logger.info) |
| 50 | +sys.stderr = LoggerWriter(logger.error) |
| 51 | + |
36 | 52 | logging.info("Starting Vanilla Installer") |
37 | 53 | logger = logging.getLogger("Vanilla Installer") |
0 commit comments