]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/log.h
log: make socket address structs static const
[thirdparty/systemd.git] / src / shared / log.h
CommitLineData
03467c88 1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
5899f3b7 2
c2f1db8f 3#pragma once
5899f3b7 4
a7334b09
LP
5/***
6 This file is part of systemd.
7
8 Copyright 2010 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
a7334b09
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.
a7334b09 19
5430f7f2 20 You should have received a copy of the GNU Lesser General Public License
a7334b09
LP
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
bbe63281 24#include <stdbool.h>
17a94911 25#include <stdarg.h>
4daf54a8
ZJS
26#include <syslog.h>
27#include <sys/signalfd.h>
4104970e
ZJS
28#include <sys/types.h>
29#include <unistd.h>
0d0f0c50 30#include <errno.h>
5899f3b7
LP
31
32#include "macro.h"
20ad4cfd 33#include "sd-id128.h"
5899f3b7 34
16801e90
LP
35typedef enum LogTarget{
36 LOG_TARGET_CONSOLE,
16801e90 37 LOG_TARGET_KMSG,
5ba081b0
LP
38 LOG_TARGET_JOURNAL,
39 LOG_TARGET_JOURNAL_OR_KMSG,
843d2643
LP
40 LOG_TARGET_SYSLOG,
41 LOG_TARGET_SYSLOG_OR_KMSG,
5ba081b0 42 LOG_TARGET_AUTO, /* console if stderr is tty, JOURNAL_OR_KMSG otherwise */
a6903061 43 LOG_TARGET_SAFE, /* console if stderr is tty, KMSG otherwise */
9fae33d2 44 LOG_TARGET_NULL,
16801e90
LP
45 _LOG_TARGET_MAX,
46 _LOG_TARGET_INVALID = -1
47} LogTarget;
48
49void log_set_target(LogTarget target);
50void log_set_max_level(int level);
3eff4208 51void log_set_facility(int facility);
16801e90 52
34f0e866
LP
53int log_set_target_from_string(const char *e);
54int log_set_max_level_from_string(const char *e);
55
bbe63281 56void log_show_color(bool b);
b1e90ec5 57bool log_get_show_color(void) _pure_;
bbe63281 58void log_show_location(bool b);
b1e90ec5 59bool log_get_show_location(void) _pure_;
bbe63281
LP
60
61int log_show_color_from_string(const char *e);
62int log_show_location_from_string(const char *e);
63
44a6b1b6
ZJS
64LogTarget log_get_target(void) _pure_;
65int log_get_max_level(void) _pure_;
1adf1049 66
843d2643 67int log_open(void);
871e5809 68void log_close(void);
4d8a7798 69void log_forget_fds(void);
843d2643 70
16801e90 71void log_close_syslog(void);
5ba081b0 72void log_close_journal(void);
843d2643
LP
73void log_close_kmsg(void);
74void log_close_console(void);
16801e90 75
34f0e866
LP
76void log_parse_environment(void);
77
79008bdd 78int log_internal(
877d54e9 79 int level,
086891e5 80 int error,
79008bdd 81 const char *file,
877d54e9
LP
82 int line,
83 const char *func,
086891e5 84 const char *format, ...) _printf_(6,7);
5899f3b7 85
79008bdd 86int log_internalv(
877d54e9 87 int level,
086891e5 88 int error,
79008bdd 89 const char *file,
877d54e9
LP
90 int line,
91 const char *func,
92 const char *format,
086891e5 93 va_list ap) _printf_(6,0);
877d54e9 94
79008bdd 95int log_object_internal(
fdf9f9bb 96 int level,
086891e5 97 int error,
79008bdd 98 const char *file,
fdf9f9bb
ZJS
99 int line,
100 const char *func,
79008bdd 101 const char *object_field,
fdf9f9bb 102 const char *object,
086891e5 103 const char *format, ...) _printf_(8,9);
fdf9f9bb 104
79008bdd 105int log_object_internalv(
fdf9f9bb 106 int level,
086891e5 107 int error,
fdf9f9bb
ZJS
108 const char*file,
109 int line,
110 const char *func,
79008bdd 111 const char *object_field,
fdf9f9bb
ZJS
112 const char *object,
113 const char *format,
086891e5 114 va_list ap) _printf_(8,0);
fdf9f9bb 115
877d54e9
LP
116int log_struct_internal(
117 int level,
086891e5 118 int error,
877d54e9
LP
119 const char *file,
120 int line,
121 const char *func,
086891e5 122 const char *format, ...) _printf_(6,0) _sentinel_;
877d54e9
LP
123
124int log_oom_internal(
125 const char *file,
126 int line,
127 const char *func);
185986c6 128
2149e37c
LP
129/* This modifies the buffer passed! */
130int log_dump_internal(
877d54e9 131 int level,
086891e5 132 int error,
79008bdd 133 const char *file,
877d54e9
LP
134 int line,
135 const char *func,
136 char *buffer);
137
086891e5 138/* Logging for various assertions */
919ce0b7 139noreturn void log_assert_failed(
877d54e9
LP
140 const char *text,
141 const char *file,
142 int line,
143 const char *func);
144
919ce0b7 145noreturn void log_assert_failed_unreachable(
877d54e9
LP
146 const char *text,
147 const char *file,
148 int line,
149 const char *func);
80514f9c
LP
150
151void log_assert_failed_return(
152 const char *text,
153 const char *file,
154 int line,
155 const char *func);
2149e37c 156
086891e5
LP
157/* Logging with level */
158#define log_full_errno(level, error, ...) \
159 do { \
160 if (log_get_max_level() >= (level)) \
79008bdd 161 log_internal((level), error, __FILE__, __LINE__, __func__, __VA_ARGS__); \
086891e5 162 } while (false)
87ff6b1c 163
086891e5
LP
164#define log_full(level, ...) log_full_errno(level, 0, __VA_ARGS__)
165
166/* Normal logging */
4104970e
ZJS
167#define log_debug(...) log_full(LOG_DEBUG, __VA_ARGS__)
168#define log_info(...) log_full(LOG_INFO, __VA_ARGS__)
169#define log_notice(...) log_full(LOG_NOTICE, __VA_ARGS__)
170#define log_warning(...) log_full(LOG_WARNING, __VA_ARGS__)
171#define log_error(...) log_full(LOG_ERR, __VA_ARGS__)
172#define log_emergency(...) log_full(getpid() == 1 ? LOG_EMERG : LOG_ERR, __VA_ARGS__)
5899f3b7 173
086891e5
LP
174/* Logging triggered by an errno-like error */
175#define log_debug_errno(error, ...) log_full_errno(LOG_DEBUG, error, __VA_ARGS__)
176#define log_info_errno(error, ...) log_full_errno(LOG_INFO, error, __VA_ARGS__)
177#define log_notice_errno(error, ...) log_full_errno(LOG_NOTICE, error, __VA_ARGS__)
178#define log_warning_errno(error, ...) log_full_errno(LOG_WARNING, error, __VA_ARGS__)
179#define log_error_errno(error, ...) log_full_errno(LOG_ERR, error, __VA_ARGS__)
180#define log_emergency_errno(error, ...) log_full_errno(getpid() == 1 ? LOG_EMERG : LOG_ERR, __VA_ARGS__)
181
cb41ff29
ZJS
182#ifdef LOG_TRACE
183# define log_trace(...) log_debug(__VA_ARGS__)
184#else
185# define log_trace(...) do {} while(0)
186#endif
187
086891e5
LP
188/* Structured logging */
189#define log_struct(level, ...) log_struct_internal(level, 0, __FILE__, __LINE__, __func__, __VA_ARGS__)
190#define log_struct_errno(level, error, ...) log_struct_internal(level, error, __FILE__, __LINE__, __func__, __VA_ARGS__)
0d0f0c50 191
2149e37c 192/* This modifies the buffer passed! */
086891e5
LP
193#define log_dump(level, buffer) log_dump_internal(level, 0, __FILE__, __LINE__, __func__, buffer)
194
195#define log_oom() log_oom_internal(__FILE__, __LINE__, __func__)
2149e37c 196
44a6b1b6 197bool log_on_console(void) _pure_;
81270860 198
44a6b1b6
ZJS
199const char *log_target_to_string(LogTarget target) _const_;
200LogTarget log_target_from_string(const char *s) _pure_;
706911fb 201
e2cc6eca
LP
202/* Helpers to prepare various fields for structured logging */
203#define LOG_MESSAGE(fmt, ...) "MESSAGE=" fmt, ##__VA_ARGS__
204#define LOG_MESSAGE_ID(x) "MESSAGE_ID=" SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(x)
8f16f51d 205#define LOG_ERRNO(error) "ERRNO=%i", abs(error)
4daf54a8
ZJS
206
207void log_received_signal(int level, const struct signalfd_siginfo *si);
c1dc6153
LP
208
209void log_set_upgrade_syslog_to_journal(bool b);