sd_journal_send发送二进制数据。如何使用journalctl检索数据?

时间:2018-07-05 00:28:27

标签: c++ linux binary systemd systemd-journald

我正在将systemd-journal作为一种从外部处理器收集日志的方法。我对它在必要时收集二进制数据的能力非常感兴趣。

我现在只是在测试和研究期刊。我很清楚还有其他可能更好的解决方案。

我正在像这样记录二进制数据:

// strData is a string container containing binary data
strData += '\0';

sd_journal_send(
    "MESSAGE=test_msg",
    "MESSAGE_ID=12345",
    "BINARY=%s", strData.c_str(),
    NULL);

使用journalctl工具时,将显示日志行。我可以从终端找到这样的日志行:

journalctl MESSAGE_ID=12345

我可以从终端获取日志中所有日志的二进制数据:

journalctl --field=BINARY

我需要将二进制数据保存到文件中,以便可以从程序进行访问并对其进行解码。我该怎么办?

这不起作用:

journalctl --field=BINARY MESSAGE_ID=12345

我到达那里错误:

“以'MESSAGE_ID = 1234567890987654321开头的外部参数”

有什么建议吗? systemd-journal上的文档似乎很薄。预先感谢。

1 个答案:

答案 0 :(得分:1)

您选择了错误的选项。请参阅以下文档:

   -F, --field=
       Print all possible data values the specified field can take in all entries of the journal.

vs

   --output-fields=
       A comma separated list of the fields which should be included in the output. 

您还必须指定纯输出格式(-o cat)才能获取原始内容:

journalctl  --output-fields=BINARY  MESSAGE_ID=12345  -o cat