]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/systemd/sd-journal.h
tree-wide: remove Lennart's copyright lines
[thirdparty/systemd.git] / src / systemd / sd-journal.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
6695ed7a
LP
2#ifndef foosdjournalhfoo
3#define foosdjournalhfoo
87d2c1ff
LP
4
5/***
87d2c1ff
LP
6
7 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
8 under the terms of the GNU Lesser General Public License as published by
9 the Free Software Foundation; either version 2.1 of the License, or
87d2c1ff
LP
10 (at your option) any later version.
11
12 systemd is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 15 Lesser General Public License for more details.
87d2c1ff 16
5430f7f2 17 You should have received a copy of the GNU Lesser General Public License
87d2c1ff
LP
18 along with systemd; If not, see <http://www.gnu.org/licenses/>.
19***/
20
21#include <inttypes.h>
7f3e6257 22#include <stdarg.h>
71d35b6b 23#include <sys/types.h>
7f3e6257 24#include <sys/uio.h>
b070e7f3 25#include <syslog.h>
87d2c1ff 26
aacf3b48 27#include "sd-id128.h"
71d35b6b 28
aacf3b48 29#include "_sd-common.h"
de190aef 30
cb07866b
LP
31/* Journal APIs. See sd-journal(3) for more information. */
32
0095c454
LP
33_SD_BEGIN_DECLARATIONS;
34
7f3e6257 35/* Write to daemon */
aacf3b48
LP
36int sd_journal_print(int priority, const char *format, ...) _sd_printf_(2, 3);
37int sd_journal_printv(int priority, const char *format, va_list ap) _sd_printf_(2, 0);
38int sd_journal_send(const char *format, ...) _sd_printf_(1, 0) _sd_sentinel_;
7f3e6257 39int sd_journal_sendv(const struct iovec *iov, int n);
18c7ed18 40int sd_journal_perror(const char *message);
7f3e6257 41
49cf4ece 42/* Used by the macros below. You probably don't want to call this directly. */
aacf3b48
LP
43int sd_journal_print_with_location(int priority, const char *file, const char *line, const char *func, const char *format, ...) _sd_printf_(5, 6);
44int 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);
45int sd_journal_send_with_location(const char *file, const char *line, const char *func, const char *format, ...) _sd_printf_(4, 0) _sd_sentinel_;
b070e7f3 46int sd_journal_sendv_with_location(const char *file, const char *line, const char *func, const struct iovec *iov, int n);
18c7ed18 47int sd_journal_perror_with_location(const char *file, const char *line, const char *func, const char *message);
b070e7f3
LP
48
49/* implicitly add code location to messages sent, if this is enabled */
50#ifndef SD_JOURNAL_SUPPRESS_LOCATION
51
0095c454
LP
52#define sd_journal_print(priority, ...) sd_journal_print_with_location(priority, "CODE_FILE=" __FILE__, "CODE_LINE=" _SD_STRINGIFY(__LINE__), __func__, __VA_ARGS__)
53#define sd_journal_printv(priority, format, ap) sd_journal_printv_with_location(priority, "CODE_FILE=" __FILE__, "CODE_LINE=" _SD_STRINGIFY(__LINE__), __func__, format, ap)
54#define sd_journal_send(...) sd_journal_send_with_location("CODE_FILE=" __FILE__, "CODE_LINE=" _SD_STRINGIFY(__LINE__), __func__, __VA_ARGS__)
55#define sd_journal_sendv(iovec, n) sd_journal_sendv_with_location("CODE_FILE=" __FILE__, "CODE_LINE=" _SD_STRINGIFY(__LINE__), __func__, iovec, n)
56#define sd_journal_perror(message) sd_journal_perror_with_location("CODE_FILE=" __FILE__, "CODE_LINE=" _SD_STRINGIFY(__LINE__), __func__, message)
b070e7f3
LP
57
58#endif
59
4cd9a9d9 60int sd_journal_stream_fd(const char *identifier, int priority, int level_prefix);
fe652127 61
7f3e6257
LP
62/* Browse journal stream */
63
87d2c1ff
LP
64typedef struct sd_journal sd_journal;
65
3c1668da 66/* Open flags */
cf244689 67enum {
d077390c
LP
68 SD_JOURNAL_LOCAL_ONLY = 1 << 0,
69 SD_JOURNAL_RUNTIME_ONLY = 1 << 1,
70 SD_JOURNAL_SYSTEM = 1 << 2,
71 SD_JOURNAL_CURRENT_USER = 1 << 3,
72 SD_JOURNAL_OS_ROOT = 1 << 4,
fd38203a 73
e0c0b07d 74 SD_JOURNAL_SYSTEM_ONLY = SD_JOURNAL_SYSTEM /* deprecated name */
cf244689
LP
75};
76
3c1668da
LP
77/* Wakeup event types */
78enum {
79 SD_JOURNAL_NOP,
80 SD_JOURNAL_APPEND,
81 SD_JOURNAL_INVALIDATE
82};
83
cf244689 84int sd_journal_open(sd_journal **ret, int flags);
a963990f 85int sd_journal_open_directory(sd_journal **ret, const char *path, int flags);
5d1ce257 86int sd_journal_open_directory_fd(sd_journal **ret, int fd, int flags);
5302ebe1 87int sd_journal_open_files(sd_journal **ret, const char **paths, int flags);
5d1ce257 88int sd_journal_open_files_fd(sd_journal **ret, int fds[], unsigned n_fds, int flags);
2daa9cbd 89int sd_journal_open_container(sd_journal **ret, const char *machine, int flags); /* deprecated */
87d2c1ff
LP
90void sd_journal_close(sd_journal *j);
91
92int sd_journal_previous(sd_journal *j);
93int sd_journal_next(sd_journal *j);
94
de190aef
LP
95int sd_journal_previous_skip(sd_journal *j, uint64_t skip);
96int sd_journal_next_skip(sd_journal *j, uint64_t skip);
97
cec736d2 98int sd_journal_get_realtime_usec(sd_journal *j, uint64_t *ret);
de190aef 99int sd_journal_get_monotonic_usec(sd_journal *j, uint64_t *ret, sd_id128_t *ret_boot_id);
4171a667 100
93b73b06
LP
101int sd_journal_set_data_threshold(sd_journal *j, size_t sz);
102int sd_journal_get_data_threshold(sd_journal *j, size_t *sz);
103
8725d60a
LP
104int sd_journal_get_data(sd_journal *j, const char *field, const void **data, size_t *l);
105int sd_journal_enumerate_data(sd_journal *j, const void **data, size_t *l);
de190aef 106void sd_journal_restart_data(sd_journal *j);
87d2c1ff 107
1cc101f1 108int sd_journal_add_match(sd_journal *j, const void *data, size_t size);
cbdca852 109int sd_journal_add_disjunction(sd_journal *j);
cd34b3c6 110int sd_journal_add_conjunction(sd_journal *j);
cec736d2 111void sd_journal_flush_matches(sd_journal *j);
87d2c1ff
LP
112
113int sd_journal_seek_head(sd_journal *j);
114int sd_journal_seek_tail(sd_journal *j);
de190aef
LP
115int sd_journal_seek_monotonic_usec(sd_journal *j, sd_id128_t boot_id, uint64_t usec);
116int sd_journal_seek_realtime_usec(sd_journal *j, uint64_t usec);
117int sd_journal_seek_cursor(sd_journal *j, const char *cursor);
87d2c1ff 118
3fbf9cbb 119int sd_journal_get_cursor(sd_journal *j, char **cursor);
c6511e85 120int sd_journal_test_cursor(sd_journal *j, const char *cursor);
87d2c1ff 121
08984293
LP
122int sd_journal_get_cutoff_realtime_usec(sd_journal *j, uint64_t *from, uint64_t *to);
123int sd_journal_get_cutoff_monotonic_usec(sd_journal *j, const sd_id128_t boot_id, uint64_t *from, uint64_t *to);
124
a1a03e30
LP
125int sd_journal_get_usage(sd_journal *j, uint64_t *bytes);
126
3c1668da
LP
127int sd_journal_query_unique(sd_journal *j, const char *field);
128int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_t *l);
129void sd_journal_restart_unique(sd_journal *j);
1cc101f1 130
eb86030e
LP
131int sd_journal_enumerate_fields(sd_journal *j, const char **field);
132void sd_journal_restart_fields(sd_journal *j);
133
50f20cfd 134int sd_journal_get_fd(sd_journal *j);
ee531d94 135int sd_journal_get_events(sd_journal *j);
39c155ea 136int sd_journal_get_timeout(sd_journal *j, uint64_t *timeout_usec);
50f20cfd 137int sd_journal_process(sd_journal *j);
e02d1cf7 138int sd_journal_wait(sd_journal *j, uint64_t timeout_usec);
39c155ea 139int sd_journal_reliable_fd(sd_journal *j);
1cc101f1 140
d4205751 141int sd_journal_get_catalog(sd_journal *j, char **text);
151b9b96 142int sd_journal_get_catalog_for_message_id(sd_id128_t id, char **text);
d4205751 143
39fd5b08
JS
144int sd_journal_has_runtime_files(sd_journal *j);
145int sd_journal_has_persistent_files(sd_journal *j);
146
eb86030e 147/* The inverse condition avoids ambiguity of dangling 'else' after the macro */
de190aef 148#define SD_JOURNAL_FOREACH(j) \
8d1c8bd7
DH
149 if (sd_journal_seek_head(j) < 0) { } \
150 else while (sd_journal_next(j) > 0)
8725d60a 151
eb86030e 152/* The inverse condition avoids ambiguity of dangling 'else' after the macro */
de190aef 153#define SD_JOURNAL_FOREACH_BACKWARDS(j) \
8d1c8bd7
DH
154 if (sd_journal_seek_tail(j) < 0) { } \
155 else while (sd_journal_previous(j) > 0)
3fbf9cbb 156
eb86030e 157/* Iterate through the data fields of the current journal entry */
8725d60a 158#define SD_JOURNAL_FOREACH_DATA(j, data, l) \
de190aef 159 for (sd_journal_restart_data(j); sd_journal_enumerate_data((j), &(data), &(l)) > 0; )
3fbf9cbb 160
eb86030e 161/* Iterate through the all known values of a specific field */
3c1668da
LP
162#define SD_JOURNAL_FOREACH_UNIQUE(j, data, l) \
163 for (sd_journal_restart_unique(j); sd_journal_enumerate_unique((j), &(data), &(l)) > 0; )
3fbf9cbb 164
eb86030e
LP
165/* Iterate through all known field names */
166#define SD_JOURNAL_FOREACH_FIELD(j, field) \
167 for (sd_journal_restart_fields(j); sd_journal_enumerate_fields((j), &(field)) > 0; )
168
4afd3348
LP
169_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_journal, sd_journal_close);
170
0095c454 171_SD_END_DECLARATIONS;
f9873976 172
87d2c1ff 173#endif