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