mirror of
https://github.com/NixOS/nix
synced 2025-07-01 04:18:00 +02:00
makeTeeLogger(): Distinguish between main and extra loggers
This commit is contained in:
parent
eca002ddc4
commit
37f3b255b2
3 changed files with 20 additions and 7 deletions
|
@ -344,15 +344,16 @@ std::unique_ptr<Logger> makeJSONLogger(const std::filesystem::path & path, bool
|
||||||
void applyJSONLogger()
|
void applyJSONLogger()
|
||||||
{
|
{
|
||||||
if (!loggerSettings.jsonLogPath.get().empty()) {
|
if (!loggerSettings.jsonLogPath.get().empty()) {
|
||||||
std::vector<std::unique_ptr<Logger>> loggers;
|
|
||||||
try {
|
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));
|
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 (...) {
|
} catch (...) {
|
||||||
logger = std::move(loggers[0]);
|
|
||||||
ignoreExceptionExceptInterrupt();
|
ignoreExceptionExceptInterrupt();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -215,7 +215,14 @@ extern std::unique_ptr<Logger> logger;
|
||||||
|
|
||||||
std::unique_ptr<Logger> makeSimpleLogger(bool printBuildLogs = true);
|
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);
|
std::unique_ptr<Logger> makeJSONLogger(Descriptor fd, bool includeNixPrefix = true);
|
||||||
|
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue