summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/common/cli.hpp14
-rw-r--r--src/buildtool/main/main.cpp6
2 files changed, 13 insertions, 7 deletions
diff --git a/src/buildtool/common/cli.hpp b/src/buildtool/common/cli.hpp
index 0a8fcf56..6592a02f 100644
--- a/src/buildtool/common/cli.hpp
+++ b/src/buildtool/common/cli.hpp
@@ -42,7 +42,7 @@ struct CommonArguments {
};
struct LogArguments {
- std::optional<std::filesystem::path> log_file{};
+ std::vector<std::filesystem::path> log_files{};
LogLevel log_limit{kDefaultLogLevel};
bool plain_log{false};
};
@@ -151,9 +151,15 @@ static inline auto SetupCommonArguments(
static inline auto SetupLogArguments(
gsl::not_null<CLI::App*> const& app,
gsl::not_null<LogArguments*> const& clargs) {
- app->add_option(
- "-f,--log-file", clargs->log_file, "Path to local log file.")
- ->type_name("PATH");
+ app->add_option_function<std::string>(
+ "-f,--log-file",
+ [clargs](auto const& log_file_) {
+ clargs->log_files.emplace_back(log_file_);
+ },
+ "Path to local log file.")
+ ->type_name("PATH")
+ ->trigger_on_parse(); // run callback on all instances while parsing,
+ // not after all parsing is done
app->add_option_function<std::underlying_type_t<LogLevel>>(
"--log-limit",
[clargs](auto const& limit) {
diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp
index ded21591..dfa25dd3 100644
--- a/src/buildtool/main/main.cpp
+++ b/src/buildtool/main/main.cpp
@@ -230,9 +230,9 @@ void SetupDefaultLogging() {
void SetupLogging(LogArguments const& clargs) {
LogConfig::SetLogLimit(clargs.log_limit);
LogConfig::SetSinks({LogSinkCmdLine::CreateFactory(not clargs.plain_log)});
- if (clargs.log_file) {
- LogConfig::AddSink(LogSinkFile::CreateFactory(
- *clargs.log_file, LogSinkFile::Mode::Overwrite));
+ for (auto const& log_file : clargs.log_files) {
+ LogConfig::AddSink(
+ LogSinkFile::CreateFactory(log_file, LogSinkFile::Mode::Overwrite));
}
}