1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
3 #ifndef foosdjournalhfoo
4 #define foosdjournalhfoo
7 This file is part of systemd.
9 Copyright 2011 Lennart Poettering
11 systemd is free software; you can redistribute it and/or modify it
12 under the terms of the GNU Lesser General Public License as published by
13 the Free Software Foundation; either version 2.1 of the License, or
14 (at your option) any later version.
16 systemd is distributed in the hope that it will be useful, but
17 WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 Lesser General Public License for more details.
21 You should have received a copy of the GNU Lesser General Public License
22 along with systemd; If not, see <http://www.gnu.org/licenses/>.
26 #include <sys/types.h>
32 #include "_sd-common.h"
34 /* Journal APIs. See sd-journal(3) for more information. */
36 _SD_BEGIN_DECLARATIONS;
39 int sd_journal_print(int priority, const char *format, ...) _sd_printf_(2, 3);
40 int sd_journal_printv(int priority, const char *format, va_list ap) _sd_printf_(2, 0);
41 int sd_journal_send(const char *format, ...) _sd_printf_(1, 0) _sd_sentinel_;
42 int sd_journal_sendv(const struct iovec *iov, int n);
43 int sd_journal_perror(const char *message);
45 /* Used by the macros below. You probably don't want to call this directly. */
46 int sd_journal_print_with_location(int priority, const char *file, const char *line, const char *func, const char *format, ...) _sd_printf_(5, 6);
47 int sd_journal_printv_with_location(int priority, const char *file, const char *line, const char *func, const char *format, va_list ap) _sd_printf_(5, 0);
48 int sd_journal_send_with_location(const char *file, const char *line, const char *func, const char *format, ...) _sd_printf_(4, 0) _sd_sentinel_;
49 int sd_journal_sendv_with_location(const char *file, const char *line, const char *func, const struct iovec *iov, int n);
50 int sd_journal_perror_with_location(const char *file, const char *line, const char *func, const char *message);
52 /* implicitly add code location to messages sent, if this is enabled */
53 #ifndef SD_JOURNAL_SUPPRESS_LOCATION
55 #define sd_journal_print(priority, ...) sd_journal_print_with_location(priority, "CODE_FILE=" __FILE__, "CODE_LINE=" _SD_STRINGIFY(__LINE__), __func__, __VA_ARGS__)
56 #define sd_journal_printv(priority, format, ap) sd_journal_printv_with_location(priority, "CODE_FILE=" __FILE__, "CODE_LINE=" _SD_STRINGIFY(__LINE__), __func__, format, ap)
57 #define sd_journal_send(...) sd_journal_send_with_location("CODE_FILE=" __FILE__, "CODE_LINE=" _SD_STRINGIFY(__LINE__), __func__, __VA_ARGS__)
58 #define sd_journal_sendv(iovec, n) sd_journal_sendv_with_location("CODE_FILE=" __FILE__, "CODE_LINE=" _SD_STRINGIFY(__LINE__), __func__, iovec, n)
59 #define sd_journal_perror(message) sd_journal_perror_with_location("CODE_FILE=" __FILE__, "CODE_LINE=" _SD_STRINGIFY(__LINE__), __func__, message)
63 int sd_journal_stream_fd(const char *identifier, int priority, int level_prefix);
65 /* Browse journal stream */
67 typedef struct sd_journal sd_journal;
71 SD_JOURNAL_LOCAL_ONLY = 1,
72 SD_JOURNAL_RUNTIME_ONLY = 2,
73 SD_JOURNAL_SYSTEM = 4,
74 SD_JOURNAL_CURRENT_USER = 8,
76 SD_JOURNAL_SYSTEM_ONLY = SD_JOURNAL_SYSTEM, /* deprecated name */
79 /* Wakeup event types */
86 int sd_journal_open(sd_journal **ret, int flags);
87 int sd_journal_open_directory(sd_journal **ret, const char *path, int flags);
88 int sd_journal_open_files(sd_journal **ret, const char **paths, int flags);
89 int sd_journal_open_container(sd_journal **ret, const char *machine, int flags);
90 void sd_journal_close(sd_journal *j);
92 int sd_journal_previous(sd_journal *j);
93 int sd_journal_next(sd_journal *j);
95 int sd_journal_previous_skip(sd_journal *j, uint64_t skip);
96 int sd_journal_next_skip(sd_journal *j, uint64_t skip);
98 int sd_journal_get_realtime_usec(sd_journal *j, uint64_t *ret);
99 int sd_journal_get_monotonic_usec(sd_journal *j, uint64_t *ret, sd_id128_t *ret_boot_id);
101 int sd_journal_set_data_threshold(sd_journal *j, size_t sz);
102 int sd_journal_get_data_threshold(sd_journal *j, size_t *sz);
104 int sd_journal_get_data(sd_journal *j, const char *field, const void **data, size_t *l);
105 int sd_journal_enumerate_data(sd_journal *j, const void **data, size_t *l);
106 void sd_journal_restart_data(sd_journal *j);
108 int sd_journal_add_match(sd_journal *j, const void *data, size_t size);
109 int sd_journal_add_disjunction(sd_journal *j);
110 int sd_journal_add_conjunction(sd_journal *j);
111 void sd_journal_flush_matches(sd_journal *j);
113 int sd_journal_seek_head(sd_journal *j);
114 int sd_journal_seek_tail(sd_journal *j);
115 int sd_journal_seek_monotonic_usec(sd_journal *j, sd_id128_t boot_id, uint64_t usec);
116 int sd_journal_seek_realtime_usec(sd_journal *j, uint64_t usec);
117 int sd_journal_seek_cursor(sd_journal *j, const char *cursor);
119 int sd_journal_get_cursor(sd_journal *j, char **cursor);
120 int sd_journal_test_cursor(sd_journal *j, const char *cursor);
122 int sd_journal_get_cutoff_realtime_usec(sd_journal *j, uint64_t *from, uint64_t *to);
123 int sd_journal_get_cutoff_monotonic_usec(sd_journal *j, const sd_id128_t boot_id, uint64_t *from, uint64_t *to);
125 int sd_journal_get_usage(sd_journal *j, uint64_t *bytes);
127 int sd_journal_query_unique(sd_journal *j, const char *field);
128 int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_t *l);
129 void sd_journal_restart_unique(sd_journal *j);
131 int sd_journal_get_fd(sd_journal *j);
132 int sd_journal_get_events(sd_journal *j);
133 int sd_journal_get_timeout(sd_journal *j, uint64_t *timeout_usec);
134 int sd_journal_process(sd_journal *j);
135 int sd_journal_wait(sd_journal *j, uint64_t timeout_usec);
136 int sd_journal_reliable_fd(sd_journal *j);
138 int sd_journal_get_catalog(sd_journal *j, char **text);
139 int sd_journal_get_catalog_for_message_id(sd_id128_t id, char **text);
141 #define SD_JOURNAL_FOREACH(j) \
142 if (sd_journal_seek_head(j) >= 0) \
143 while (sd_journal_next(j) > 0)
145 #define SD_JOURNAL_FOREACH_BACKWARDS(j) \
146 if (sd_journal_seek_tail(j) >= 0) \
147 while (sd_journal_previous(j) > 0)
149 #define SD_JOURNAL_FOREACH_DATA(j, data, l) \
150 for (sd_journal_restart_data(j); sd_journal_enumerate_data((j), &(data), &(l)) > 0; )
152 #define SD_JOURNAL_FOREACH_UNIQUE(j, data, l) \
153 for (sd_journal_restart_unique(j); sd_journal_enumerate_unique((j), &(data), &(l)) > 0; )
155 _SD_END_DECLARATIONS;