got binary logging actually fully working (!!!)
diff --git a/aos/linux_code/logging/linux_logging.cc b/aos/linux_code/logging/linux_logging.cc
index 985577b..676e3b7 100644
--- a/aos/linux_code/logging/linux_logging.cc
+++ b/aos/linux_code/logging/linux_logging.cc
@@ -25,15 +25,29 @@
namespace linux_code {
namespace {
-class linuxQueueLogImplementation : public LogImplementation {
- virtual void DoLog(log_level level, const char *format, va_list ap) {
+class LinuxQueueLogImplementation : public LogImplementation {
+ LogMessage *GetMessageOrDie() {
LogMessage *message = static_cast<LogMessage *>(queue->GetMessage());
if (message == NULL) {
- LOG(FATAL, "queue get message failed\n");
+ LOG(FATAL, "%p->GetMessage() failed\n", queue);
+ } else {
+ return message;
}
+ }
+ virtual void DoLog(log_level level, const char *format, va_list ap) override {
+ LogMessage *message = GetMessageOrDie();
internal::FillInMessage(level, format, ap, message);
+ Write(message);
+ }
+ virtual void LogStruct(log_level level, const ::std::string &message_string,
+ size_t size, const MessageType *type,
+ const ::std::function<size_t(char *)> &serialize)
+ override {
+ LogMessage *message = GetMessageOrDie();
+ internal::FillInMessageStructure(level, message_string, size, type,
+ serialize, message);
Write(message);
}
};
@@ -48,7 +62,7 @@
Die("logging: couldn't fetch queue\n");
}
- AddImplementation(new linuxQueueLogImplementation());
+ AddImplementation(new LinuxQueueLogImplementation());
}
const LogMessage *ReadNext(int flags, int *index) {