diff --git a/config.py b/config.py index 1e86fa4a..312ceb4a 100644 --- a/config.py +++ b/config.py @@ -442,6 +442,16 @@ class Config: self._SELECTED_TAB_TARGET_LANGUAGES = value saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) + @property + def ENABLE_LOGGER(self): + return self._ENABLE_LOGGER + + @ENABLE_LOGGER.setter + def ENABLE_LOGGER(self, value): + if type(value) is bool: + self._ENABLE_LOGGER = value + saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) + # Config Window @property def IS_CONFIG_WINDOW_COMPACT_MODE(self): @@ -515,6 +525,7 @@ class Config: "2":"English\n(United States)", "3":"English\n(United States)", } + self._ENABLE_LOGGER = False # Config Window self._IS_CONFIG_WINDOW_COMPACT_MODE = False diff --git a/main.py b/main.py index c939d26b..028ee6d9 100644 --- a/main.py +++ b/main.py @@ -29,6 +29,8 @@ def sendMicMessage(message): view.printToTextbox_OSCError() view.printToTextbox_SentMessage(message, translation) + if config.ENABLE_LOGGER is True: + model.logger.info(f"[SEND] {message} ({translation})") def startTranscriptionSendMessage(): model.startMicTranscript(sendMicMessage) @@ -55,6 +57,8 @@ def receiveSpeakerMessage(message): xsoverlay_message = xsoverlay_message.replace("[translation]", translation) model.notificationXSOverlay(xsoverlay_message) view.printToTextbox_ReceivedMessage(message, translation) + if config.ENABLE_LOGGER is True: + model.logger.info(f"[RECEIVE] {message} ({translation})") def startTranscriptionReceiveMessage(): model.startSpeakerTranscript(receiveSpeakerMessage) @@ -88,6 +92,8 @@ def sendChatMessage(message): # update textbox message log view.printToTextbox_SentMessage(message, translation) + if config.ENABLE_LOGGER is True: + model.logger.info(f"[SEND] {message} ({translation})") # delete message in entry message box if config.ENABLE_AUTO_CLEAR_MESSAGE_BOX is True: @@ -386,6 +392,10 @@ model.checkOSCStarted() # check Software Updated model.checkSoftwareUpdated() +# init logger +if config.ENABLE_LOGGER is True: + model.startLogger() + # set UI and callback view.register( sidebar_features={ diff --git a/model.py b/model.py index 19bb3820..f2c63a25 100644 --- a/model.py +++ b/model.py @@ -1,3 +1,6 @@ +from os import makedirs +from datetime import datetime +from logging import getLogger, FileHandler, Formatter, INFO from time import sleep from queue import Queue from threading import Thread, Event @@ -49,6 +52,7 @@ class Model: return cls._instance def init(self): + self.logger = None self.mic_energy_recorder = None self.mic_energy_plot_progressbar = None self.speaker_energy_get_progressbar = None @@ -77,6 +81,21 @@ class Model: config.AUTH_KEYS = auth_keys return result + def startLogger(self): + makedirs("./logs", exist_ok=True) + logger = getLogger() + logger.setLevel(INFO) + file_name = f"./logs/{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.log" + file_handler = FileHandler(file_name, encoding="utf-8", delay=True) + formatter = Formatter("[%(asctime)s] %(message)s") + file_handler.setFormatter(formatter) + logger.addHandler(file_handler) + self.logger = logger + + def stopLogger(self): + self.logger.disabled = True + self.logger = None + @staticmethod def getListLanguageAndCountry(): langs = []