Provide simulation log writer in aos/util

I'd been copy-pasting the same code for all my simulation logging needs.

Change-Id: Id82714f2f0ab12f0078b73b625bf5099b433d656
Signed-off-by: James Kuszmaul <jabukuszmaul+collab@gmail.com>
diff --git a/aos/util/simulation_logger.cc b/aos/util/simulation_logger.cc
new file mode 100644
index 0000000..e459978
--- /dev/null
+++ b/aos/util/simulation_logger.cc
@@ -0,0 +1,39 @@
+#include "aos/util/simulation_logger.h"
+
+namespace aos::util {
+LoggerState::LoggerState(aos::SimulatedEventLoopFactory *factory,
+                         const aos::Node *node, std::string_view output_folder)
+    : event_loop_(factory->MakeEventLoop("logger", node)),
+      namer_(std::make_unique<aos::logger::MultiNodeFilesLogNamer>(
+          absl::StrCat(output_folder, "/", node->name()->string_view(), "/"),
+          event_loop_.get())),
+      logger_(std::make_unique<aos::logger::Logger>(event_loop_.get())) {
+  event_loop_->SkipTimingReport();
+  event_loop_->SkipAosLog();
+  event_loop_->OnRun([this]() { logger_->StartLogging(std::move(namer_)); });
+}
+
+std::vector<std::unique_ptr<LoggerState>> MakeLoggersForNodes(
+    aos::SimulatedEventLoopFactory *factory,
+    const std::vector<std::string> &nodes_to_log,
+    std::string_view output_folder) {
+  std::vector<std::unique_ptr<LoggerState>> loggers;
+  for (const std::string &node : nodes_to_log) {
+    loggers.emplace_back(std::make_unique<LoggerState>(
+        factory, aos::configuration::GetNode(factory->configuration(), node),
+        output_folder));
+  }
+  return loggers;
+}
+
+std::vector<std::unique_ptr<LoggerState>> MakeLoggersForAllNodes(
+    aos::SimulatedEventLoopFactory *factory, std::string_view output_folder) {
+  std::vector<std::unique_ptr<LoggerState>> loggers;
+  for (const aos::Node *node : configuration::GetNodes(factory->configuration())) {
+    loggers.emplace_back(
+        std::make_unique<LoggerState>(factory, node, output_folder));
+  }
+  return loggers;
+}
+
+}  // namespace aos::util