Skip to content

Commit 37f3b25

Browse files
committed
makeTeeLogger(): Distinguish between main and extra loggers
1 parent eca002d commit 37f3b25

File tree

3 files changed

+20
-7
lines changed

3 files changed

+20
-7
lines changed

src/libutil/logging.cc

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -344,15 +344,16 @@ std::unique_ptr<Logger> makeJSONLogger(const std::filesystem::path & path, bool
344344
void applyJSONLogger()
345345
{
346346
if (!loggerSettings.jsonLogPath.get().empty()) {
347-
std::vector<std::unique_ptr<Logger>> loggers;
348347
try {
349-
loggers.push_back(std::move(logger));
348+
std::vector<std::unique_ptr<Logger>> loggers;
350349
loggers.push_back(makeJSONLogger(std::filesystem::path(loggerSettings.jsonLogPath.get()), false));
351-
logger = makeTeeLogger(std::move(loggers));
350+
// Note: this had better not throw, otherwise `logger` is
351+
// left unset.
352+
logger = makeTeeLogger(std::move(logger), std::move(loggers));
352353
} catch (...) {
353-
logger = std::move(loggers[0]);
354354
ignoreExceptionExceptInterrupt();
355355
}
356+
356357
}
357358
}
358359

src/libutil/logging.hh

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,14 @@ extern std::unique_ptr<Logger> logger;
215215

216216
std::unique_ptr<Logger> makeSimpleLogger(bool printBuildLogs = true);
217217

218-
std::unique_ptr<Logger> makeTeeLogger(std::vector<std::unique_ptr<Logger>> && loggers);
218+
/**
219+
* Create a logger that sends log messages to `mainLogger` and the
220+
* list of loggers in `extraLoggers`. Only `mainLogger` is used for
221+
* writing to stdout and getting user input.
222+
*/
223+
std::unique_ptr<Logger> makeTeeLogger(
224+
std::unique_ptr<Logger> mainLogger,
225+
std::vector<std::unique_ptr<Logger>> && extraLoggers);
219226

220227
std::unique_ptr<Logger> makeJSONLogger(Descriptor fd, bool includeNixPrefix = true);
221228

src/libutil/tee-logger.cc

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,14 @@ struct TeeLogger : Logger
100100
}
101101
};
102102

103-
std::unique_ptr<Logger> makeTeeLogger(std::vector<std::unique_ptr<Logger>> && loggers)
103+
std::unique_ptr<Logger>
104+
makeTeeLogger(std::unique_ptr<Logger> mainLogger, std::vector<std::unique_ptr<Logger>> && extraLoggers)
104105
{
105-
return std::make_unique<TeeLogger>(std::move(loggers));
106+
std::vector<std::unique_ptr<Logger>> allLoggers;
107+
allLoggers.push_back(std::move(mainLogger));
108+
for (auto & l : extraLoggers)
109+
allLoggers.push_back(std::move(l));
110+
return std::make_unique<TeeLogger>(std::move(allLoggers));
106111
}
107112

108113
}

0 commit comments

Comments
 (0)