From 9f680874c5aa15304c3ab3b942170a743287f87b Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 14 Mar 2025 17:33:48 +0100 Subject: [PATCH] Make the JSON logger more robust We now ignore connection / write errors. --- src/libutil/logging.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/libutil/logging.cc b/src/libutil/logging.cc index 1d0d3fa2d..21f13d3c0 100644 --- a/src/libutil/logging.cc +++ b/src/libutil/logging.cc @@ -204,6 +204,7 @@ struct JSONLogger : Logger { struct State { + bool enabled = true; }; Sync _state; @@ -216,8 +217,18 @@ struct JSONLogger : Logger { /* Acquire a lock to prevent log messages from clobbering each other. */ - auto state(_state.lock()); - writeLine(fd, line); + try { + auto state(_state.lock()); + if (state->enabled) + writeLine(fd, line); + } catch (...) { + bool enabled = false; + std::swap(_state.lock()->enabled, enabled); + if (enabled) { + ignoreExceptionExceptInterrupt(); + logger->warn("disabling JSON logger due to write errors"); + } + } } void log(Verbosity lvl, std::string_view s) override