Я работаю с журналами systemd для создания специальной программы обработки журналов. Я пытаюсь работать с sd_journal API, но у меня есть несколько вопросов:Постоянно отслеживать журналы Systemd
- Можно ли прослушивать во время выполнения журналов (SD_JOURNAL_RUNTIME_ONLY) без опроса? SD_JOURNAL_FOREACH_DATA и sd_journal_get_data не say much об этом.
- На ваш взгляд, это хороший дизайн?
- Есть ли способ понять , где пересылаются журналы времени выполнения? Я сделал «systemctl status systemd-journald.service» и статус службы запущен. Однако, когда я пытаюсь читать журналы, используя sd_journal_open, он не показывает никаких записей. Я вижу записи через journalctl. Я хочу сделать это, не читая файлы журнала (с помощью sniffing/run/log/journal, который является соком домена unix), чтобы избежать диска io.
Вот пример кода, я использую:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <systemd/sd-journal.h>
#include <systemd/sd-daemon.h>
int main(int argc, char *argv[]) {
int ret_val = 0;
int count = 0;
sd_journal *jd;
sd_journal_print(LOG_INFO, "Hello World, this is PID %lu!", (unsigned long) getpid());
do {
ret_val = sd_journal_open (&jd, SD_JOURNAL_SYSTEM | SD_JOURNAL_RUNTIME_ONLY | SD_JOURNAL_LOCAL_ONLY);
if (ret_val != 0) {
fprintf(stderr, "Failed to open journal: %s\n", strerror(-ret_val));
break;
}
printf ("Current Journal was loaded successfully!\n");
const void *d;
size_t l;
SD_JOURNAL_FOREACH_DATA (jd, d, l) {
printf("%.*s\n", (int)l, (const char*) d);
count++;
}
sd_journal_close(jd);
printf ("# of Journal entries read: %d\n", count);
} while (0);
return 0;
}
'' 'journalctl -f''' не делает то, что вам нужно? Это весь поток системных журналов на stdout для вас. Если нет, возможно, вы могли бы точно описать, какую информацию вам нужно извлечь из журнала. – jforberg
Journalctl собирает все журналы. В моем случае некоторые привилегированные журналы из журнала нуждаются в дальнейшей обработке и массировании для других подсистем. Мое требование - – VarunPandey
. В отношении данного вопроса, попросите напрямую обратиться к одному из каналов связи проекта systemd. –