diff --git a/src/pydase/server/web_server/sio_setup.py b/src/pydase/server/web_server/sio_setup.py index f1d9da8..2342b8e 100644 --- a/src/pydase/server/web_server/sio_setup.py +++ b/src/pydase/server/web_server/sio_setup.py @@ -202,7 +202,7 @@ def setup_sio_events(sio: socketio.AsyncServer, state_manager: StateManager) -> @sio.event async def trigger_method(sid: str, data: TriggerMethodDict) -> Any: async with sio.session(sid) as session: - logger.debug( + logger.info( "Client [%s] is triggering the method '%s'", session["client_id"], data["access_path"], diff --git a/src/pydase/utils/logging.py b/src/pydase/utils/logging.py index cb83c04..f071d6b 100644 --- a/src/pydase/utils/logging.py +++ b/src/pydase/utils/logging.py @@ -29,22 +29,44 @@ LOGGING_CONFIG = { "datefmt": "%Y-%m-%d %H:%M:%S", }, }, + "filters": { + "only_pydase_server": { + "()": "pydase.utils.logging.NameFilter", + "match": "pydase.server", + }, + "exclude_pydase_server": { + "()": "pydase.utils.logging.NameFilter", + "match": "pydase.server", + "invert": True, + }, + }, "handlers": { - "default": { + "stdout_handler": { "formatter": "default", "class": "logging.StreamHandler", "stream": "ext://sys.stdout", + "filters": ["only_pydase_server"], + }, + "stderr_handler": { + "formatter": "default", + "class": "logging.StreamHandler", + "stream": "ext://sys.stderr", + "filters": ["exclude_pydase_server"], }, }, "loggers": { - "pydase": {"handlers": ["default"], "level": LOG_LEVEL, "propagate": False}, + "pydase": { + "handlers": ["stdout_handler", "stderr_handler"], + "level": LOG_LEVEL, + "propagate": False, + }, "aiohttp_middlewares": { - "handlers": ["default"], + "handlers": ["stderr_handler"], "level": logging.WARNING, "propagate": False, }, "aiohttp": { - "handlers": ["default"], + "handlers": ["stderr_handler"], "level": logging.INFO, "propagate": False, }, @@ -52,6 +74,23 @@ LOGGING_CONFIG = { } +class NameFilter(logging.Filter): + """ + Logging filter that allows filtering logs based on the logger name. + Can either include or exclude a specific logger. + """ + + def __init__(self, match: str, invert: bool = False): + super().__init__() + self.match = match + self.invert = invert + + def filter(self, record: logging.LogRecord) -> bool: + if self.invert: + return not record.name.startswith(self.match) + return record.name.startswith(self.match) + + class DefaultFormatter(logging.Formatter): """ A custom log formatter class that: