1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-07-01 00:07:58 +02:00

makeTeeLogger(): Distinguish between main and extra loggers

This commit is contained in:
Eelco Dolstra 2025-03-27 17:17:01 +01:00
parent eca002ddc4
commit 37f3b255b2
3 changed files with 20 additions and 7 deletions

View file

@ -344,15 +344,16 @@ std::unique_ptr<Logger> makeJSONLogger(const std::filesystem::path & path, bool
void applyJSONLogger()
{
if (!loggerSettings.jsonLogPath.get().empty()) {
std::vector<std::unique_ptr<Logger>> loggers;
try {
loggers.push_back(std::move(logger));
std::vector<std::unique_ptr<Logger>> loggers;
loggers.push_back(makeJSONLogger(std::filesystem::path(loggerSettings.jsonLogPath.get()), false));
logger = makeTeeLogger(std::move(loggers));
// Note: this had better not throw, otherwise `logger` is
// left unset.
logger = makeTeeLogger(std::move(logger), std::move(loggers));
} catch (...) {
logger = std::move(loggers[0]);
ignoreExceptionExceptInterrupt();
}
}
}

View file

@ -215,7 +215,14 @@ extern std::unique_ptr<Logger> logger;
std::unique_ptr<Logger> makeSimpleLogger(bool printBuildLogs = true);
std::unique_ptr<Logger> makeTeeLogger(std::vector<std::unique_ptr<Logger>> && loggers);
/**
* Create a logger that sends log messages to `mainLogger` and the
* list of loggers in `extraLoggers`. Only `mainLogger` is used for
* writing to stdout and getting user input.
*/
std::unique_ptr<Logger> makeTeeLogger(
std::unique_ptr<Logger> mainLogger,
std::vector<std::unique_ptr<Logger>> && extraLoggers);
std::unique_ptr<Logger> makeJSONLogger(Descriptor fd, bool includeNixPrefix = true);

View file

@ -100,9 +100,14 @@ struct TeeLogger : Logger
}
};
std::unique_ptr<Logger> makeTeeLogger(std::vector<std::unique_ptr<Logger>> && loggers)
std::unique_ptr<Logger>
makeTeeLogger(std::unique_ptr<Logger> mainLogger, std::vector<std::unique_ptr<Logger>> && extraLoggers)
{
return std::make_unique<TeeLogger>(std::move(loggers));
std::vector<std::unique_ptr<Logger>> allLoggers;
allLoggers.push_back(std::move(mainLogger));
for (auto & l : extraLoggers)
allLoggers.push_back(std::move(l));
return std::make_unique<TeeLogger>(std::move(allLoggers));
}
}