]> git.proxmox.com Git - mirror_frr.git/blob - ldpd/log.c
staticd: Do not ready prefix for printing till it's decoded
[mirror_frr.git] / ldpd / log.c
1 /* $OpenBSD$ */
2
3 /*
4 * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19 #include <zebra.h>
20
21 #include "ldpd.h"
22 #include "ldpe.h"
23 #include "lde.h"
24 #include "log.h"
25
26 #include <lib/log.h>
27 #include <lib/log_int.h>
28
29 const char *log_procname;
30
31 void
32 logit(int pri, const char *fmt, ...)
33 {
34 va_list ap;
35
36 va_start(ap, fmt);
37 vlog(pri, fmt, ap);
38 va_end(ap);
39 }
40
41 void
42 vlog(int pri, const char *fmt, va_list ap)
43 {
44 char buf[1024];
45
46 switch (ldpd_process) {
47 case PROC_LDE_ENGINE:
48 vsnprintf(buf, sizeof(buf), fmt, ap);
49 lde_imsg_compose_parent_sync(IMSG_LOG, pri, buf,
50 strlen(buf) + 1);
51 break;
52 case PROC_LDP_ENGINE:
53 vsnprintf(buf, sizeof(buf), fmt, ap);
54 ldpe_imsg_compose_parent_sync(IMSG_LOG, pri, buf,
55 strlen(buf) + 1);
56 break;
57 case PROC_MAIN:
58 vzlog(pri, fmt, ap);
59 break;
60 }
61 }
62
63 void
64 log_warn(const char *emsg, ...)
65 {
66 char *nfmt;
67 va_list ap;
68
69 /* best effort to even work in out of memory situations */
70 if (emsg == NULL)
71 logit(LOG_ERR, "%s", strerror(errno));
72 else {
73 va_start(ap, emsg);
74
75 if (asprintf(&nfmt, "%s: %s", emsg, strerror(errno)) == -1) {
76 /* we tried it... */
77 vlog(LOG_ERR, emsg, ap);
78 logit(LOG_ERR, "%s", strerror(errno));
79 } else {
80 vlog(LOG_ERR, nfmt, ap);
81 free(nfmt);
82 }
83 va_end(ap);
84 }
85 }
86
87 void
88 log_warnx(const char *emsg, ...)
89 {
90 va_list ap;
91
92 va_start(ap, emsg);
93 vlog(LOG_ERR, emsg, ap);
94 va_end(ap);
95 }
96
97 void
98 log_info(const char *emsg, ...)
99 {
100 va_list ap;
101
102 va_start(ap, emsg);
103 vlog(LOG_INFO, emsg, ap);
104 va_end(ap);
105 }
106
107 void
108 log_notice(const char *emsg, ...)
109 {
110 va_list ap;
111
112 va_start(ap, emsg);
113 vlog(LOG_NOTICE, emsg, ap);
114 va_end(ap);
115 }
116
117 void
118 log_debug(const char *emsg, ...)
119 {
120 va_list ap;
121
122 va_start(ap, emsg);
123 vlog(LOG_DEBUG, emsg, ap);
124 va_end(ap);
125 }
126
127 void
128 fatal(const char *emsg)
129 {
130 if (emsg == NULL)
131 logit(LOG_CRIT, "fatal in %s: %s", log_procname,
132 strerror(errno));
133 else
134 if (errno)
135 logit(LOG_CRIT, "fatal in %s: %s: %s",
136 log_procname, emsg, strerror(errno));
137 else
138 logit(LOG_CRIT, "fatal in %s: %s",
139 log_procname, emsg);
140
141 exit(1);
142 }
143
144 void
145 fatalx(const char *emsg)
146 {
147 errno = 0;
148 fatal(emsg);
149 }