C ++中的二进制日志框架

时间:2014-07-03 20:59:59

标签: logging embedded protocols

许多语言都有很多日志框架。但我没有找到任何适合某些嵌入式应用程序的框架。我想在嵌入式设备中记录数据,并且没有很多带宽或大量可用内存。

我想要的日志记录框架应该像通常的日志记录框架一样可以使用描述性字符串等直接在源代码中。我想从源代码中提取描述性字符串到一个单独的文件(例如xml),并用二进制文件替换它们。在分析工具中,我将获取这些ID并再次显示文本。对于PC调试我可以直接使用字符串。

我想了解提供消息ID,格式化指令和附带参数值的可行方法,但是以紧凑的二进制格式放入通信端口。

此外,我想避免看到

引入的c ++的足迹爆炸
#include <iostream>

#include <stdio.h>

等。与标准c库类型格式化库一样。

1 个答案:

答案 0 :(得分:1)

  

有谁知道如何从源代码中轻松提取字符串并用二进制输出的唯一ID替换它们?

好吧,我认为您希望将设备记录为类似error message id的内容,并传递一些已知的参数值,并将其格式化为客户端的人类可读文本。

E.g。使用google protobufcustom options这样的协议应该是合适的:

message DebugLogMessage {
   extensions 4 to max;
}

message SystemStateLogMessage {
    option render_format = "System temp: %d, Restarts: %d";
    extend DebugLogMessage {
        optional SystemStateLogMessage bar = 126;
    }
    optional int64 temp;
    optional int16 restarts;
}

render_format选项仅用于客户端站点。在小目标上,您只需要提供当前值。

为了从小型嵌入式系统提供数据参数,Nanopb为c语言建立了良好的绑定,同时保留了相当小的占用空间。

注意
这只是勾勒出我认为你需要的东西的一个粗略想法。我希望你能抓住抽象。我并不是说这是唯一可行的方式,要实现我所理解的你想拥有的东西,我也不会为你提供生产就绪代码。