]> git.proxmox.com Git - systemd.git/blame - src/systemd/sd-journal.h
New upstream version 236
[systemd.git] / src / systemd / sd-journal.h
CommitLineData
52ad194e 1/* SPDX-License-Identifier: LGPL-2.1+ */
60f067b4
JS
2#ifndef foosdjournalhfoo
3#define foosdjournalhfoo
663996b3
MS
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
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
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
18 Lesser General Public License for more details.
19
20 You should have received a copy of the GNU Lesser General Public License
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
24#include <inttypes.h>
663996b3 25#include <stdarg.h>
4c89c718 26#include <sys/types.h>
663996b3
MS
27#include <sys/uio.h>
28#include <syslog.h>
29
60f067b4 30#include "sd-id128.h"
4c89c718 31
60f067b4 32#include "_sd-common.h"
663996b3
MS
33
34/* Journal APIs. See sd-journal(3) for more information. */
35
60f067b4
JS
36_SD_BEGIN_DECLARATIONS;
37
663996b3 38/* Write to daemon */
60f067b4
JS
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_;
663996b3
MS
42int sd_journal_sendv(const struct iovec *iov, int n);
43int sd_journal_perror(const char *message);
44
60f067b4
JS
45/* Used by the macros below. You probably don't want to call this directly. */
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_;
663996b3
MS
49int sd_journal_sendv_with_location(const char *file, const char *line, const char *func, const struct iovec *iov, int n);
50int sd_journal_perror_with_location(const char *file, const char *line, const char *func, const char *message);
51
52/* implicitly add code location to messages sent, if this is enabled */
53#ifndef SD_JOURNAL_SUPPRESS_LOCATION
54
60f067b4
JS
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)
663996b3
MS
60
61#endif
62
63int sd_journal_stream_fd(const char *identifier, int priority, int level_prefix);
64
65/* Browse journal stream */
66
67typedef struct sd_journal sd_journal;
68
69/* Open flags */
70enum {
aa27b158
MP
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,
60f067b4 76
aa27b158 77 SD_JOURNAL_SYSTEM_ONLY = SD_JOURNAL_SYSTEM /* deprecated name */
663996b3
MS
78};
79
80/* Wakeup event types */
81enum {
82 SD_JOURNAL_NOP,
83 SD_JOURNAL_APPEND,
84 SD_JOURNAL_INVALIDATE
85};
86
87int sd_journal_open(sd_journal **ret, int flags);
88int sd_journal_open_directory(sd_journal **ret, const char *path, int flags);
aa27b158 89int sd_journal_open_directory_fd(sd_journal **ret, int fd, int flags);
14228c0d 90int sd_journal_open_files(sd_journal **ret, const char **paths, int flags);
aa27b158
MP
91int sd_journal_open_files_fd(sd_journal **ret, int fds[], unsigned n_fds, int flags);
92int sd_journal_open_container(sd_journal **ret, const char *machine, int flags); /* deprecated */
663996b3
MS
93void sd_journal_close(sd_journal *j);
94
95int sd_journal_previous(sd_journal *j);
96int sd_journal_next(sd_journal *j);
97
98int sd_journal_previous_skip(sd_journal *j, uint64_t skip);
99int sd_journal_next_skip(sd_journal *j, uint64_t skip);
100
101int sd_journal_get_realtime_usec(sd_journal *j, uint64_t *ret);
102int sd_journal_get_monotonic_usec(sd_journal *j, uint64_t *ret, sd_id128_t *ret_boot_id);
103
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
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);
109void sd_journal_restart_data(sd_journal *j);
110
111int sd_journal_add_match(sd_journal *j, const void *data, size_t size);
112int sd_journal_add_disjunction(sd_journal *j);
113int sd_journal_add_conjunction(sd_journal *j);
114void sd_journal_flush_matches(sd_journal *j);
115
116int sd_journal_seek_head(sd_journal *j);
117int sd_journal_seek_tail(sd_journal *j);
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);
121
122int sd_journal_get_cursor(sd_journal *j, char **cursor);
123int sd_journal_test_cursor(sd_journal *j, const char *cursor);
124
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
128int sd_journal_get_usage(sd_journal *j, uint64_t *bytes);
129
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);
133
4c89c718
MP
134int sd_journal_enumerate_fields(sd_journal *j, const char **field);
135void sd_journal_restart_fields(sd_journal *j);
136
663996b3
MS
137int sd_journal_get_fd(sd_journal *j);
138int sd_journal_get_events(sd_journal *j);
139int sd_journal_get_timeout(sd_journal *j, uint64_t *timeout_usec);
140int sd_journal_process(sd_journal *j);
141int sd_journal_wait(sd_journal *j, uint64_t timeout_usec);
142int sd_journal_reliable_fd(sd_journal *j);
143
144int sd_journal_get_catalog(sd_journal *j, char **text);
60f067b4 145int sd_journal_get_catalog_for_message_id(sd_id128_t id, char **text);
663996b3 146
4c89c718
MP
147int sd_journal_has_runtime_files(sd_journal *j);
148int sd_journal_has_persistent_files(sd_journal *j);
149
150/* The inverse condition avoids ambiguity of dangling 'else' after the macro */
663996b3 151#define SD_JOURNAL_FOREACH(j) \
e735f4d4
MP
152 if (sd_journal_seek_head(j) < 0) { } \
153 else while (sd_journal_next(j) > 0)
663996b3 154
4c89c718 155/* The inverse condition avoids ambiguity of dangling 'else' after the macro */
663996b3 156#define SD_JOURNAL_FOREACH_BACKWARDS(j) \
e735f4d4
MP
157 if (sd_journal_seek_tail(j) < 0) { } \
158 else while (sd_journal_previous(j) > 0)
663996b3 159
4c89c718 160/* Iterate through the data fields of the current journal entry */
663996b3
MS
161#define SD_JOURNAL_FOREACH_DATA(j, data, l) \
162 for (sd_journal_restart_data(j); sd_journal_enumerate_data((j), &(data), &(l)) > 0; )
163
4c89c718 164/* Iterate through the all known values of a specific field */
663996b3
MS
165#define SD_JOURNAL_FOREACH_UNIQUE(j, data, l) \
166 for (sd_journal_restart_unique(j); sd_journal_enumerate_unique((j), &(data), &(l)) > 0; )
167
4c89c718
MP
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
172_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_journal, sd_journal_close);
173
60f067b4 174_SD_END_DECLARATIONS;
663996b3
MS
175
176#endif