aos: add dynamic logging on an opt-in basis
Applications including this can have vlog changed with:
aos_send /aos aos.logging.DynamicLogCommand '{"name": "app", "vlog_level": 1}'
Change-Id: Id387cdb501ad84ed3e266a2077ea93478b480afa
Signed-off-by: James Kuszmaul <james.kuszmaul@bluerivertech.com>
diff --git a/aos/logging/dynamic_logging.cc b/aos/logging/dynamic_logging.cc
new file mode 100644
index 0000000..d28fba2
--- /dev/null
+++ b/aos/logging/dynamic_logging.cc
@@ -0,0 +1,34 @@
+#include "aos/logging/dynamic_logging.h"
+#include "glog/logging.h"
+
+namespace aos {
+namespace logging {
+
+DynamicLogging::DynamicLogging(aos::EventLoop *event_loop)
+ : application_name_(event_loop->name()) {
+ if (event_loop->GetChannel<DynamicLogCommand>("/aos") == nullptr) {
+ LOG(WARNING) << "Disabling dynamic logger because the DynamicLogCommand "
+ "channel is not configured.";
+ } else {
+ event_loop->MakeWatcher("/aos", [this](const DynamicLogCommand &cmd) {
+ HandleDynamicLogCommand(cmd);
+ });
+ }
+}
+
+void DynamicLogging::HandleDynamicLogCommand(const DynamicLogCommand &command) {
+ // For now we expect someone to do an aos_send at the command line, thecommand
+ // may be malformed.
+ if (!command.has_name() || !command.has_vlog_level()) return;
+
+ if (command.name()->string_view() != application_name_) {
+ return;
+ }
+ if (command.vlog_level() < 0) {
+ return;
+ }
+ FLAGS_v = command.vlog_level();
+}
+
+} // namespace logging
+} // namespace aos