2 1220d7ea 2024-05-21 op * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
4 1220d7ea 2024-05-21 op * Permission to use, copy, modify, and distribute this software for any
5 1220d7ea 2024-05-21 op * purpose with or without fee is hereby granted, provided that the above
6 1220d7ea 2024-05-21 op * copyright notice and this permission notice appear in all copies.
8 1220d7ea 2024-05-21 op * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 1220d7ea 2024-05-21 op * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 1220d7ea 2024-05-21 op * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 1220d7ea 2024-05-21 op * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 1220d7ea 2024-05-21 op * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 1220d7ea 2024-05-21 op * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 1220d7ea 2024-05-21 op * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 1220d7ea 2024-05-21 op #include <stdio.h>
18 1220d7ea 2024-05-21 op #include <stdlib.h>
19 1220d7ea 2024-05-21 op #include <stdarg.h>
20 1220d7ea 2024-05-21 op #include <string.h>
21 1220d7ea 2024-05-21 op #include <syslog.h>
22 1220d7ea 2024-05-21 op #include <errno.h>
23 1220d7ea 2024-05-21 op #include <time.h>
25 1220d7ea 2024-05-21 op #include "log.h"
27 1220d7ea 2024-05-21 op static int debug;
28 1220d7ea 2024-05-21 op static int verbose;
29 1220d7ea 2024-05-21 op const char *log_procname;
32 1220d7ea 2024-05-21 op log_init(int n_debug, int facility)
34 1220d7ea 2024-05-21 op debug = n_debug;
35 1220d7ea 2024-05-21 op verbose = n_debug;
36 1220d7ea 2024-05-21 op log_procinit(getprogname());
39 1220d7ea 2024-05-21 op openlog(getprogname(), LOG_PID | LOG_NDELAY, facility);
45 1220d7ea 2024-05-21 op log_procinit(const char *procname)
47 1220d7ea 2024-05-21 op if (procname != NULL)
48 1220d7ea 2024-05-21 op log_procname = procname;
52 1220d7ea 2024-05-21 op log_setverbose(int v)
58 1220d7ea 2024-05-21 op log_getverbose(void)
60 1220d7ea 2024-05-21 op return (verbose);
64 1220d7ea 2024-05-21 op logit(int pri, const char *fmt, ...)
68 1220d7ea 2024-05-21 op va_start(ap, fmt);
69 1220d7ea 2024-05-21 op vlog(pri, fmt, ap);
74 1220d7ea 2024-05-21 op vlog(int pri, const char *fmt, va_list ap)
77 1220d7ea 2024-05-21 op int saved_errno = errno;
80 1220d7ea 2024-05-21 op /* best effort in out of mem situations */
81 1220d7ea 2024-05-21 op if (asprintf(&nfmt, "%s: %s\n", log_procname, fmt) == -1) {
82 1220d7ea 2024-05-21 op vfprintf(stderr, fmt, ap);
83 1220d7ea 2024-05-21 op fprintf(stderr, "\n");
85 1220d7ea 2024-05-21 op vfprintf(stderr, nfmt, ap);
88 1220d7ea 2024-05-21 op fflush(stderr);
90 1220d7ea 2024-05-21 op vsyslog(pri, fmt, ap);
92 1220d7ea 2024-05-21 op errno = saved_errno;
96 1220d7ea 2024-05-21 op log_warn(const char *emsg, ...)
100 1220d7ea 2024-05-21 op int saved_errno = errno;
102 1220d7ea 2024-05-21 op /* best effort to even work in out of memory situations */
103 1220d7ea 2024-05-21 op if (emsg == NULL)
104 1220d7ea 2024-05-21 op logit(LOG_CRIT, "%s", strerror(saved_errno));
106 1220d7ea 2024-05-21 op va_start(ap, emsg);
108 1220d7ea 2024-05-21 op if (asprintf(&nfmt, "%s: %s", emsg,
109 1220d7ea 2024-05-21 op strerror(saved_errno)) == -1) {
110 1220d7ea 2024-05-21 op /* we tried it... */
111 1220d7ea 2024-05-21 op vlog(LOG_CRIT, emsg, ap);
112 1220d7ea 2024-05-21 op logit(LOG_CRIT, "%s", strerror(saved_errno));
114 1220d7ea 2024-05-21 op vlog(LOG_CRIT, nfmt, ap);
120 1220d7ea 2024-05-21 op errno = saved_errno;
124 1220d7ea 2024-05-21 op log_warnx(const char *emsg, ...)
128 1220d7ea 2024-05-21 op va_start(ap, emsg);
129 1220d7ea 2024-05-21 op vlog(LOG_CRIT, emsg, ap);
134 1220d7ea 2024-05-21 op log_info(const char *emsg, ...)
138 c89c70b6 2024-05-27 op if (verbose > 0) {
139 c89c70b6 2024-05-27 op va_start(ap, emsg);
140 c89c70b6 2024-05-27 op vlog(LOG_INFO, emsg, ap);
146 1220d7ea 2024-05-21 op log_debug(const char *emsg, ...)
150 c89c70b6 2024-05-27 op if (verbose > 1) {
151 1220d7ea 2024-05-21 op va_start(ap, emsg);
152 1220d7ea 2024-05-21 op vlog(LOG_DEBUG, emsg, ap);
158 1220d7ea 2024-05-21 op vfatalc(int code, const char *emsg, va_list ap)
160 1220d7ea 2024-05-21 op static char s[BUFSIZ];
161 1220d7ea 2024-05-21 op const char *sep;
163 1220d7ea 2024-05-21 op if (emsg != NULL) {
164 1220d7ea 2024-05-21 op (void)vsnprintf(s, sizeof(s), emsg, ap);
171 1220d7ea 2024-05-21 op logit(LOG_CRIT, "%s%s%s", s, sep, strerror(code));
173 1220d7ea 2024-05-21 op logit(LOG_CRIT, "%s", s);
177 1220d7ea 2024-05-21 op fatal(const char *emsg, ...)
181 1220d7ea 2024-05-21 op va_start(ap, emsg);
182 1220d7ea 2024-05-21 op vfatalc(errno, emsg, ap);
188 1220d7ea 2024-05-21 op fatalx(const char *emsg, ...)
192 1220d7ea 2024-05-21 op va_start(ap, emsg);
193 1220d7ea 2024-05-21 op vfatalc(0, emsg, ap);