diff --git a/src/serena/agent.py b/src/serena/agent.py index ebb22661..407b18ce 100644 --- a/src/serena/agent.py +++ b/src/serena/agent.py @@ -31,7 +31,7 @@ from overrides import override from pathspec import PathSpec from ruamel.yaml.comments import CommentedMap from sensai.util import logging -from sensai.util.logging import LOG_DEFAULT_FORMAT, FallbackHandler, LogTime +from sensai.util.logging import FallbackHandler, LogTime from sensai.util.string import ToStringMixin, dict_string from serena import serena_version @@ -41,6 +41,7 @@ from serena.constants import ( PROJECT_TEMPLATE_FILE, REPO_ROOT, SELENA_CONFIG_TEMPLATE_FILE, + SERENA_LOG_FORMAT, SERENA_MANAGED_DIR_NAME, ) from serena.dashboard import MemoryLogHandler, SerenaDashboardAPI @@ -60,7 +61,6 @@ if TYPE_CHECKING: from serena.gui_log_viewer import GuiLogViewerHandler log = logging.getLogger(__name__) -LOG_FORMAT = "%(levelname)-5s %(asctime)-15s %(name)s:%(funcName)s:%(lineno)d - %(message)s" TTool = TypeVar("TTool", bound="Tool") SUCCESS_RESULT = "OK" DEFAULT_TOOL_TIMEOUT: float = 240 @@ -751,8 +751,6 @@ class SerenaAgent: if Logger.root.level > serena_log_level: log.info(f"Changing the root logger level to {serena_log_level}") Logger.root.setLevel(serena_log_level) - # Override existing configuration (needed to configure multilspy logger as desired) - logging.basicConfig(format=LOG_DEFAULT_FORMAT, level=serena_log_level, force=True) # open GUI log window if enabled self._gui_log_handler: Union["GuiLogViewerHandler", None] = None # noqa @@ -765,7 +763,7 @@ class SerenaAgent: from serena.gui_log_viewer import GuiLogViewer, GuiLogViewerHandler self._gui_log_handler = GuiLogViewerHandler( - GuiLogViewer("dashboard", title="Serena Logs"), level=serena_log_level, format_string=LOG_FORMAT + GuiLogViewer("dashboard", title="Serena Logs"), level=serena_log_level, format_string=SERENA_LOG_FORMAT ) Logger.root.addHandler(self._gui_log_handler) diff --git a/src/serena/constants.py b/src/serena/constants.py index 30a9518b..368a7430 100644 --- a/src/serena/constants.py +++ b/src/serena/constants.py @@ -20,3 +20,5 @@ PROJECT_TEMPLATE_FILE = str(_serena_pkg_path / "resources" / "project.template.y SELENA_CONFIG_TEMPLATE_FILE = str(_serena_pkg_path / "resources" / "serena_config.template.yml") USE_PROCESS_ISOLATION = False + +SERENA_LOG_FORMAT = "%(levelname)-5s %(asctime)-15s [%(threadName)s] %(name)s:%(funcName)s:%(lineno)d - %(message)s" diff --git a/src/serena/dashboard.py b/src/serena/dashboard.py index eb86e74a..4cd98b6c 100644 --- a/src/serena/dashboard.py +++ b/src/serena/dashboard.py @@ -9,7 +9,7 @@ from flask import Flask, Response, request, send_from_directory from pydantic import BaseModel from sensai.util import logging -from serena.constants import SERENA_DASHBOARD_DIR +from serena.constants import SERENA_DASHBOARD_DIR, SERENA_LOG_FORMAT log = logging.getLogger(__name__) @@ -20,7 +20,7 @@ logging.getLogger("werkzeug").setLevel(logging.WARNING) class MemoryLogHandler(logging.Handler): def __init__(self, level: int = logging.NOTSET) -> None: super().__init__(level=level) - self.setFormatter(logging.Formatter(logging.LOG_DEFAULT_FORMAT)) + self.setFormatter(logging.Formatter(SERENA_LOG_FORMAT)) self._log_buffer = LogBuffer() self._log_queue: queue.Queue[str] = queue.Queue() self._stop_event = threading.Event() diff --git a/src/solidlsp/ls_handler.py b/src/solidlsp/ls_handler.py index f367a1fc..65a59311 100644 --- a/src/solidlsp/ls_handler.py +++ b/src/solidlsp/ls_handler.py @@ -170,12 +170,12 @@ class SolidLanguageServerHandler: # start threads to read stdout and stderr of the process threading.Thread( target=self.run_forever, - name="LSP stdout reader", + name="LSP-stdout-reader", daemon=True, ).start() threading.Thread( target=self.run_forever_stderr, - name="LSP stderr reader", + name="LSP-stderr-reader", daemon=True, ).start()