diff --git a/aos/logging/implementations.cc b/aos/logging/implementations.cc
index 89fc904..b35414e 100644
--- a/aos/logging/implementations.cc
+++ b/aos/logging/implementations.cc
@@ -1,16 +1,16 @@
 #include "aos/logging/implementations.h"
 
-#include <stdarg.h>
 #include <inttypes.h>
+#include <stdarg.h>
 
 #include <algorithm>
 #include <chrono>
 
+#include "absl/base/call_once.h"
 #include "aos/die.h"
+#include "aos/ipc_lib/queue.h"
 #include "aos/logging/printf_formats.h"
 #include "aos/time/time.h"
-#include "aos/ipc_lib/queue.h"
-#include "absl/base/call_once.h"
 
 namespace aos {
 namespace logging {
@@ -36,8 +36,8 @@
     AOS_LOG(FATAL, "can't have a next logger from here\n");
   }
 
-  __attribute__((format(GOOD_PRINTF_FORMAT_TYPE, 3, 0)))
-  void DoLog(log_level level, const char *format, va_list ap) override {
+  __attribute__((format(GOOD_PRINTF_FORMAT_TYPE, 3, 0))) void DoLog(
+      log_level level, const char *format, va_list ap) override {
     LogMessage message;
     internal::FillInMessage(level, monotonic_now(), format, ap, &message);
     internal::PrintMessage(stderr, message);
@@ -63,15 +63,13 @@
   internal::global_top_implementation.store(implementation);
 }
 
-void NewContext() {
-  internal::Context::Delete();
-}
+void NewContext() { internal::Context::Delete(); }
 
 void DoInit() {
   SetGlobalImplementation(root_implementation = new RootLogImplementation());
 
-  if (pthread_atfork(NULL /*prepare*/, NULL /*parent*/,
-                     NewContext /*child*/) != 0) {
+  if (pthread_atfork(NULL /*prepare*/, NULL /*parent*/, NewContext /*child*/) !=
+      0) {
     AOS_LOG(FATAL, "pthread_atfork(NULL, NULL, %p) failed\n", NewContext);
   }
 }
@@ -165,13 +163,9 @@
   absl::call_once(once, DoInit);
 }
 
-void Load() {
-  internal::Context::Get();
-}
+void Load() { internal::Context::Get(); }
 
-void Cleanup() {
-  internal::Context::Delete();
-}
+void Cleanup() { internal::Context::Delete(); }
 
 namespace {
 
@@ -239,14 +233,26 @@
     return ::aos::monotonic_clock::now();
   }
 
-  __attribute__((format(GOOD_PRINTF_FORMAT_TYPE, 3, 0)))
-  void DoLog(log_level level, const char *format, va_list ap) override {
+  __attribute__((format(GOOD_PRINTF_FORMAT_TYPE, 3, 0))) void DoLog(
+      log_level level, const char *format, va_list ap) override {
     LogMessage *message = GetMessageOrDie();
     internal::FillInMessage(level, monotonic_now(), format, ap, message);
     Write(message);
   }
 };
 
+class CallbackLogImplementation : public HandleMessageLogImplementation {
+ public:
+  CallbackLogImplementation(
+      const ::std::function<void(const LogMessage &)> &callback)
+      : callback_(callback) {}
+
+ private:
+  void HandleMessage(const LogMessage &message) override { callback_(message); }
+
+  ::std::function<void(const LogMessage &)> callback_;
+};
+
 }  // namespace
 
 RawQueue *GetLoggingQueue() {
@@ -264,5 +270,11 @@
   AddImplementation(new LinuxQueueLogImplementation());
 }
 
+void RegisterCallbackImplementation(
+    const ::std::function<void(const LogMessage &)> &callback) {
+  Init();
+  AddImplementation(new CallbackLogImplementation(callback));
+}
+
 }  // namespace logging
 }  // namespace aos
