diff --git a/swh/fuse/cli.py b/swh/fuse/cli.py --- a/swh/fuse/cli.py +++ b/swh/fuse/cli.py @@ -5,6 +5,7 @@ import asyncio from contextlib import ExitStack +import logging import os # WARNING: do not import unnecessary things here to keep cli startup time under @@ -106,9 +107,28 @@ from swh.fuse import fuse + # TODO: set default logging settings when --log-config is not passed + # DEFAULT_LOG_PATH = Path(".local/swh/fuse/mount.log") with ExitStack() as stack: if not foreground: + # TODO: temporary fix until swh.core has the proper logging utilities + # Disable logging config before daemonizing, and reset it once + # daemonized to be sure to not close file handlers + logging.shutdown() # Stay in the current working directory when spawning daemon cwd = os.getcwd() stack.enter_context(DaemonContext(working_directory=cwd)) + logging.config.dictConfig( + { + "version": 1, + "handlers": { + "syslog": { + "class": "logging.handlers.SysLogHandler", + "address": "/dev/log", + }, + }, + "root": {"level": ctx.obj["log_level"], "handlers": ["syslog"],}, + } + ) + asyncio.run(fuse.main(swhids, path, ctx.obj["config"])) diff --git a/swh/fuse/fuse.py b/swh/fuse/fuse.py --- a/swh/fuse/fuse.py +++ b/swh/fuse/fuse.py @@ -216,10 +216,12 @@ fuse_options = set(pyfuse3.default_options) fuse_options.add("fsname=swhfs") fuse_options.add("debug") - pyfuse3.init(fs, root_path, fuse_options) try: + pyfuse3.init(fs, root_path, fuse_options) await pyfuse3.main() + except Exception as e: + logging.error(f"Error running FUSE: {e}") finally: fs.shutdown() pyfuse3.close(unmount=True)