1 b0a6bcf7 2022-09-13 op /* $OpenBSD: log.c,v 1.1 2018/07/10 16:39:54 florian Exp $ */
4 b0a6bcf7 2022-09-13 op * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
6 b0a6bcf7 2022-09-13 op * Permission to use, copy, modify, and distribute this software for any
7 b0a6bcf7 2022-09-13 op * purpose with or without fee is hereby granted, provided that the above
8 b0a6bcf7 2022-09-13 op * copyright notice and this permission notice appear in all copies.
10 b0a6bcf7 2022-09-13 op * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 b0a6bcf7 2022-09-13 op * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 b0a6bcf7 2022-09-13 op * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 b0a6bcf7 2022-09-13 op * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 b0a6bcf7 2022-09-13 op * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 b0a6bcf7 2022-09-13 op * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 b0a6bcf7 2022-09-13 op * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 b0a6bcf7 2022-09-13 op #include <stdio.h>
20 b0a6bcf7 2022-09-13 op #include <stdlib.h>
21 b0a6bcf7 2022-09-13 op #include <stdarg.h>
22 b0a6bcf7 2022-09-13 op #include <string.h>
23 b0a6bcf7 2022-09-13 op #include <syslog.h>
24 b0a6bcf7 2022-09-13 op #include <errno.h>
25 b0a6bcf7 2022-09-13 op #include <time.h>
27 b0a6bcf7 2022-09-13 op #include "log.h"
29 b0a6bcf7 2022-09-13 op static int debug;
30 b0a6bcf7 2022-09-13 op static int verbose;
31 b0a6bcf7 2022-09-13 op static const char *log_procname;
34 b0a6bcf7 2022-09-13 op log_init(int n_debug, int facility)
36 b0a6bcf7 2022-09-13 op debug = n_debug;
37 b0a6bcf7 2022-09-13 op verbose = n_debug;
38 b0a6bcf7 2022-09-13 op log_procinit(getprogname());
41 b0a6bcf7 2022-09-13 op openlog(getprogname(), LOG_PID | LOG_NDELAY, facility);
47 b0a6bcf7 2022-09-13 op log_procinit(const char *procname)
49 b0a6bcf7 2022-09-13 op if (procname != NULL)
50 b0a6bcf7 2022-09-13 op log_procname = procname;
54 b0a6bcf7 2022-09-13 op log_setverbose(int v)
60 b0a6bcf7 2022-09-13 op log_getverbose(void)
62 b0a6bcf7 2022-09-13 op return (verbose);
66 b0a6bcf7 2022-09-13 op logit(int pri, const char *fmt, ...)
70 b0a6bcf7 2022-09-13 op va_start(ap, fmt);
71 b0a6bcf7 2022-09-13 op vlog(pri, fmt, ap);
76 b0a6bcf7 2022-09-13 op vlog(int pri, const char *fmt, va_list ap)
79 b0a6bcf7 2022-09-13 op int saved_errno = errno;
82 b0a6bcf7 2022-09-13 op /* best effort in out of mem situations */
83 b0a6bcf7 2022-09-13 op if (asprintf(&nfmt, "%s\n", fmt) == -1) {
84 b0a6bcf7 2022-09-13 op vfprintf(stderr, fmt, ap);
85 b0a6bcf7 2022-09-13 op fprintf(stderr, "\n");
87 b0a6bcf7 2022-09-13 op vfprintf(stderr, nfmt, ap);
90 b0a6bcf7 2022-09-13 op fflush(stderr);
92 b0a6bcf7 2022-09-13 op vsyslog(pri, fmt, ap);
94 b0a6bcf7 2022-09-13 op errno = saved_errno;
98 b0a6bcf7 2022-09-13 op log_warn(const char *emsg, ...)
102 b0a6bcf7 2022-09-13 op int saved_errno = errno;
104 b0a6bcf7 2022-09-13 op /* best effort to even work in out of memory situations */
105 b0a6bcf7 2022-09-13 op if (emsg == NULL)
106 b0a6bcf7 2022-09-13 op logit(LOG_ERR, "%s", strerror(saved_errno));
108 b0a6bcf7 2022-09-13 op va_start(ap, emsg);
110 b0a6bcf7 2022-09-13 op if (asprintf(&nfmt, "%s: %s", emsg,
111 b0a6bcf7 2022-09-13 op strerror(saved_errno)) == -1) {
112 b0a6bcf7 2022-09-13 op /* we tried it... */
113 b0a6bcf7 2022-09-13 op vlog(LOG_ERR, emsg, ap);
114 b0a6bcf7 2022-09-13 op logit(LOG_ERR, "%s", strerror(saved_errno));
116 b0a6bcf7 2022-09-13 op vlog(LOG_ERR, nfmt, ap);
122 b0a6bcf7 2022-09-13 op errno = saved_errno;
126 b0a6bcf7 2022-09-13 op log_warnx(const char *emsg, ...)
130 b0a6bcf7 2022-09-13 op va_start(ap, emsg);
131 b0a6bcf7 2022-09-13 op vlog(LOG_ERR, emsg, ap);
136 b0a6bcf7 2022-09-13 op log_info(const char *emsg, ...)
140 b0a6bcf7 2022-09-13 op va_start(ap, emsg);
141 b0a6bcf7 2022-09-13 op vlog(LOG_INFO, emsg, ap);
146 b0a6bcf7 2022-09-13 op log_debug(const char *emsg, ...)
150 b0a6bcf7 2022-09-13 op if (verbose) {
151 b0a6bcf7 2022-09-13 op va_start(ap, emsg);
152 b0a6bcf7 2022-09-13 op vlog(LOG_DEBUG, emsg, ap);
158 b0a6bcf7 2022-09-13 op vfatalc(int code, const char *emsg, va_list ap)
160 b0a6bcf7 2022-09-13 op static char s[BUFSIZ];
161 b0a6bcf7 2022-09-13 op const char *sep;
163 b0a6bcf7 2022-09-13 op if (emsg != NULL) {
164 b0a6bcf7 2022-09-13 op (void)vsnprintf(s, sizeof(s), emsg, ap);
171 b0a6bcf7 2022-09-13 op logit(LOG_CRIT, "fatal in %s: %s%s%s",
172 b0a6bcf7 2022-09-13 op log_procname, s, sep, strerror(code));
174 b0a6bcf7 2022-09-13 op logit(LOG_CRIT, "fatal in %s%s%s", log_procname, sep, s);
178 b0a6bcf7 2022-09-13 op fatal(const char *emsg, ...)
182 b0a6bcf7 2022-09-13 op va_start(ap, emsg);
183 b0a6bcf7 2022-09-13 op vfatalc(errno, emsg, ap);
189 b0a6bcf7 2022-09-13 op fatalx(const char *emsg, ...)
193 b0a6bcf7 2022-09-13 op va_start(ap, emsg);
194 b0a6bcf7 2022-09-13 op vfatalc(0, emsg, ap);