1 /* $OpenBSD: log.c,v 1.1 2008/06/26 15:10:01 pyr Exp $ */
5 * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
16 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
17 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 #include <sys/types.h>
31 void log_warn(const char *, ...);
32 void log_warnx(const char *, ...);
33 void log_info(const char *, ...);
34 void log_debug(const char *, ...);
35 __dead2 void fatal(const char *);
36 __dead2 void fatalx(const char *);
40 void vlog(int, const char *, va_list);
41 void logit(int, const char *, ...);
46 extern char *__progname;
51 openlog(__progname, LOG_PID | LOG_NDELAY, LOG_DAEMON);
57 logit(int pri, const char *fmt, ...)
67 vlog(int pri, const char *fmt, va_list ap)
72 /* best effort in out of mem situations */
73 if (asprintf(&nfmt, "%s\n", fmt) == -1) {
74 vfprintf(stderr, fmt, ap);
75 fprintf(stderr, "\n");
77 vfprintf(stderr, nfmt, ap);
82 vsyslog(pri, fmt, ap);
87 log_warn(const char *emsg, ...)
92 /* best effort to even work in out of memory situations */
94 logit(LOG_CRIT, "%s", strerror(errno));
98 if (asprintf(&nfmt, "%s: %s", emsg, strerror(errno)) == -1) {
100 vlog(LOG_CRIT, emsg, ap);
101 logit(LOG_CRIT, "%s", strerror(errno));
103 vlog(LOG_CRIT, nfmt, ap);
111 log_warnx(const char *emsg, ...)
116 vlog(LOG_CRIT, emsg, ap);
121 log_info(const char *emsg, ...)
126 vlog(LOG_INFO, emsg, ap);
131 log_debug(const char *emsg, ...)
137 vlog(LOG_DEBUG, emsg, ap);
143 fatal(const char *emsg)
146 logit(LOG_CRIT, "fatal: %s", strerror(errno));
149 logit(LOG_CRIT, "fatal: %s: %s",
150 emsg, strerror(errno));
152 logit(LOG_CRIT, "fatal: %s", emsg);
158 fatalx(const char *emsg)