blob: ce96c29ce9a43d46bd448de9218cf21448ef61d9 [file] [log] [blame]
Brian Silvermanfd5e2a32014-02-22 20:02:39 -08001#include "aos/common/logging/queue_logging.h"
Brian Silvermand6974f42014-02-14 13:39:21 -08002
Brian Silvermanfd5e2a32014-02-22 20:02:39 -08003#include "aos/common/logging/logging_impl.h"
Brian Silvermand6974f42014-02-14 13:39:21 -08004#include "aos/common/queue_types.h"
5
6namespace aos {
7namespace logging {
8
9void LogImplementation::DoLogStruct(
10 log_level level, const ::std::string &message, size_t size,
11 const MessageType *type, const ::std::function<size_t(char *)> &serialize,
12 int levels) {
13 internal::RunWithCurrentImplementation(
14 levels, [&](LogImplementation * implementation) {
15 implementation->LogStruct(level, message, size, type, serialize);
Brian Silvermand6974f42014-02-14 13:39:21 -080016 });
Brian Silvermanff12c9f2014-03-19 17:53:29 -070017
18 if (level == FATAL) {
19 char serialized[1024];
20 if (size > sizeof(serialized)) {
21 Die("LOG(FATAL) structure too big to serialize");
22 }
23 size_t used = serialize(serialized);
24 char printed[LOG_MESSAGE_LEN];
25 size_t printed_bytes = sizeof(printed);
26 if (!PrintMessage(printed, &printed_bytes, serialized, &used, *type)) {
27 Die("LOG(FATAL) PrintMessage call failed");
28 }
29 Die("%.*s: %.*s\n", static_cast<int>(message.size()), message.data(),
30 static_cast<int>(printed_bytes), printed);
31 }
Brian Silvermand6974f42014-02-14 13:39:21 -080032}
33
34} // namespace logging
35} // namespace aos