Skip to content

Commit 3be3d9a

Browse files
committed
(tweak) Move logger to own file
- Remove duplicate console prints - Strip ANSI escape codes - BUG: Inner C/C++ Exceptions are not handled
1 parent f9ff263 commit 3be3d9a

File tree

2 files changed

+48
-47
lines changed

2 files changed

+48
-47
lines changed

BabbleApp/babbleapp.py

Lines changed: 2 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
"""
1818

1919
import os
20-
import sys
21-
import logging
2220
import PySimpleGUI as sg
2321
import queue
2422
import requests
@@ -34,6 +32,7 @@
3432
from calib_settings_widget import CalibSettingsWidget
3533
from utils.misc_utils import EnsurePath, is_nt, bg_color_highlight, bg_color_clear
3634
from lang_manager import LocaleStringManager as lang
35+
from logger import setup_logging
3736

3837
winmm = None
3938

@@ -62,50 +61,6 @@
6261
page_url = "https://github.com/SummerSigh/ProjectBabble/releases/latest"
6362
appversion = "Babble v2.1.0 Beta"
6463

65-
def setupLogging():
66-
# Determine the user's Documents directory
67-
documents_dir = os.path.join(os.path.expanduser("~"), "Documents")
68-
log_dir = os.path.join(documents_dir, "ProjectBabble")
69-
os.makedirs(log_dir, exist_ok=True)
70-
71-
log_file = os.path.join(log_dir, "latest.log")
72-
73-
# Set up logging
74-
logger = logging.getLogger("debug_logger")
75-
logger.setLevel(logging.DEBUG)
76-
77-
# File handler for logging to file
78-
file_handler = logging.FileHandler(log_file, mode='w', encoding='utf-8')
79-
file_handler.setLevel(logging.DEBUG)
80-
formatter = logging.Formatter('%(asctime)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
81-
file_handler.setFormatter(formatter)
82-
83-
logger.addHandler(file_handler)
84-
85-
# Optionally output to console as well
86-
console_handler = logging.StreamHandler(sys.stdout)
87-
console_handler.setLevel(logging.DEBUG)
88-
console_handler.setFormatter(formatter)
89-
logger.addHandler(console_handler)
90-
91-
# Redirect stdout and stderr to logger
92-
class StreamToLogger:
93-
def __init__(self, stream, log_level):
94-
self.stream = stream
95-
self.log_level = log_level
96-
97-
def write(self, message):
98-
if message.strip():
99-
logger.log(self.log_level, message.strip())
100-
self.stream.write(message)
101-
self.stream.flush()
102-
103-
def flush(self):
104-
self.stream.flush()
105-
106-
sys.stdout = StreamToLogger(sys.stdout, logging.INFO)
107-
sys.stderr = StreamToLogger(sys.stderr, logging.ERROR)
108-
10964
def timerResolution(toggle):
11065
if winmm != None:
11166
if toggle:
@@ -118,7 +73,7 @@ def timerResolution(toggle):
11873

11974
def main():
12075
EnsurePath()
121-
setupLogging()
76+
setup_logging()
12277

12378
# Get Configuration
12479
config: BabbleConfig = BabbleConfig.load()

BabbleApp/logger.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import re
2+
import logging
3+
import os
4+
import sys
5+
6+
def strip_ansi_codes(text):
7+
"""Remove ANSI color codes from a string."""
8+
ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])')
9+
return ansi_escape.sub('', text)
10+
11+
def setup_logging():
12+
# Determine the user's Documents directory
13+
documents_dir = os.path.join(os.path.expanduser("~"), "Documents")
14+
log_dir = os.path.join(documents_dir, "ProjectBabble")
15+
os.makedirs(log_dir, exist_ok=True)
16+
log_file = os.path.join(log_dir, "latest.log")
17+
18+
# Set up logging
19+
logger = logging.getLogger("debug_logger")
20+
logger.setLevel(logging.DEBUG)
21+
22+
file_handler = logging.FileHandler(log_file, mode='w', encoding='utf-8')
23+
file_handler.setLevel(logging.DEBUG)
24+
formatter = logging.Formatter('%(asctime)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
25+
file_handler.setFormatter(formatter)
26+
27+
logger.addHandler(file_handler)
28+
29+
# Redirect stdout and stderr
30+
class StreamToLogger:
31+
def __init__(self, stream, log_level):
32+
self.stream = stream
33+
self.log_level = log_level
34+
35+
def write(self, message):
36+
message = strip_ansi_codes(message)
37+
if message.strip():
38+
logger.log(self.log_level, message.strip())
39+
self.stream.write(message)
40+
self.stream.flush()
41+
42+
def flush(self):
43+
self.stream.flush()
44+
45+
sys.stdout = StreamToLogger(sys.stdout, logging.INFO)
46+
sys.stderr = StreamToLogger(sys.stderr, logging.ERROR)

0 commit comments

Comments
 (0)