Hello.
I've got some strange results when played with sd_journal_* functions. The task
is to obtain messages _only_ with
specified fields (e.g. MESSAGE_ID=bla-bla-bla) and I get it. Theoretically
there is only one tool which send unique msg
and one service to whom these msg.
And problem is that I can see incoming messages even when sending tool is not
running (no execution).
Looks like I got all messages from journal (kernel, other services, etc.)
In other words on terminal where service is running I may see that we got a
record in journal with MESSAGE_ID=bla-bla-bla
and it prints me >MESSAGE=DDDDD<.
Also I may see the same incoming messages as a result on any reaction, e.g.
plug USB drive.
Here is some code (errors checking is omitted):
-------------------------------- service that listens journal
-----------------------------
sd_journal_open(&sdj, SD_JOURNAL_RUNTIME_ONLY|
SD_JOURNAL_SYSTEM_ONLY|
SD_JOURNAL_LOCAL_ONLY));
sd_journal_add_match(sdj, "MESSAGE_ID=bla-bla-bla", 0);
sd_journal_seek_tail(j);
sd_journal_previous(j);
sd_journal_add_match(sdj, "MESSAGE_ID=bla-bla-bla", 0); /* ??? */
for (;;) {
const void *data;
size_t length;
ret = sd_journal_next(sdj);
if (ret == 0) {
ret = sd_journal_wait(sdj, (uint64_t) -1);
printf("wait ret = %d \n", ret);
}
sd_journal_get_data(sdj, "MESSAGE", &data, &length);
printf(">%.*s<\n", (int) length, data);
}
---------------------------- tool that sends messages
-----------------------------
int main(int argc, char *argv[])
{
int i;
int ret;
sd_journal *sdj;
i = 100;
while (i--) {
sd_journal_send("MESSAGE=DDDDD",
"COUNTER=%d", i,
"MESSAGE_ID=bla-bla-bla",
NULL);
sleep(3);
}
return 0;
}
Could you please tell me where should I dig to get right results or point to
errors.
Thanks.
_______________________________________________
systemd-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/systemd-devel