2 * This is free and unencumbered software released into the public domain.
4 * Anyone is free to copy, modify, publish, use, compile, sell, or
5 * distribute this software, either in source code form or as a compiled
6 * binary, for any purpose, commercial or non-commercial, and by any
21 __dead void log_syslog_fatal(int, const char *, ...);
22 __dead void log_syslog_fatalx(int, const char *, ...);
23 void log_syslog_warn(const char *, ...);
24 void log_syslog_warnx(const char *, ...);
25 void log_syslog_info(const char *, ...);
26 void log_syslog_debug(const char *, ...);
28 const struct logger syslogger = {
29 .fatal = &log_syslog_fatal,
30 .fatalx = &log_syslog_fatalx,
31 .warn = &log_syslog_warn,
32 .warnx = &log_syslog_warnx,
33 .info = &log_syslog_info,
34 .debug = &log_syslog_debug,
37 const struct logger dbglogger = {
46 const struct logger *logger = &dbglogger;
48 static char logbuf[4096];
53 log_init(int n_debug, int facility)
60 setvbuf(stderr, logbuf, _IOLBF, sizeof(logbuf));
62 openlog(getprogname(), LOG_PID | LOG_NDELAY, facility);
74 log_syslog_fatal(int eval, const char *fmt, ...)
76 static char s[BUFSIZ];
83 r = vsnprintf(s, sizeof(s), fmt, ap);
88 if (r > 0 && (size_t)r <= sizeof(s))
89 syslog(LOG_DAEMON|LOG_CRIT, "%s: %s", s, strerror(errno));
95 log_syslog_fatalx(int eval, const char *fmt, ...)
100 vsyslog(LOG_DAEMON|LOG_CRIT, fmt, ap);
107 log_syslog_warn(const char *fmt, ...)
109 static char s[BUFSIZ];
116 r = vsnprintf(s, sizeof(s), fmt, ap);
121 if (r > 0 && (size_t)r < sizeof(s))
122 syslog(LOG_DAEMON|LOG_ERR, "%s: %s", s, strerror(errno));
128 log_syslog_warnx(const char *fmt, ...)
135 vsyslog(LOG_DAEMON|LOG_ERR, fmt, ap);
141 log_syslog_info(const char *fmt, ...)
151 vsyslog(LOG_DAEMON|LOG_INFO, fmt, ap);
157 log_syslog_debug(const char *fmt, ...)
167 vsyslog(LOG_DAEMON|LOG_DEBUG, fmt, ap);