diff --git a/nc_py_api/ex_app/logging.py b/nc_py_api/ex_app/logging.py index cd245767..b0056658 100644 --- a/nc_py_api/ex_app/logging.py +++ b/nc_py_api/ex_app/logging.py @@ -1,6 +1,7 @@ """Transparent logging support to store logs in the nextcloud.log.""" import logging +import threading from ..nextcloud import NextcloudApp from .defs import LogLvl @@ -18,30 +19,29 @@ def _python_loglvl_to_nextcloud(levelno: int) -> LogLvl: return LogLvl.FATAL -class _NextcloudStorageHandler(logging.Handler): +class _NextcloudLogsHandler(logging.Handler): def __init__(self): super().__init__() - self.lock_flag = False def emit(self, record): - if self.lock_flag: + if threading.local().__dict__.get("nc_py_api.loghandler", False): return try: - self.lock_flag = True + threading.local().__dict__["nc_py_api.loghandler"] = True log_entry = self.format(record) log_level = record.levelno NextcloudApp().log(_python_loglvl_to_nextcloud(log_level), log_entry, fast_send=True) except Exception: # noqa pylint: disable=broad-exception-caught self.handleError(record) finally: - self.lock_flag = False + threading.local().__dict__["nc_py_api.loghandler"] = False def setup_nextcloud_logging(logger_name: str | None = None, logging_level: int = logging.DEBUG): """Function to easily send all or selected log entries to Nextcloud.""" logger = logging.getLogger(logger_name) - nextcloud_handler = _NextcloudStorageHandler() + nextcloud_handler = _NextcloudLogsHandler() nextcloud_handler.setLevel(logging_level) logger.addHandler(nextcloud_handler) return nextcloud_handler