/* This file is part of tagr. Copyright (C) 2000, 2005, 2009 Max Bouglacoff, Sergey Poznyakoff This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include int log_facility = LOG_FACILITY; char *log_tag; int log_print_severity; /* FIXME: not used */ void init_syslog (char *progname) { if (!log_tag) log_tag = progname; openlog (log_tag, LOG_PID, log_facility); } int syslog_level[] = { LOG_DEBUG, LOG_INFO, LOG_NOTICE, LOG_WARNING, LOG_ERR, LOG_CRIT, }; char *level_str[] = { N_("debug"), N_("info"), N_("notice"), N_("warning"), N_("error"), N_("CRITICAL"), }; void vlogmsg (int level, const char *fmt, va_list ap) { if (grecs_log_to_stderr) { fprintf (stderr, "%s: %s: ", log_tag, gettext (level_str[level])); vfprintf (stderr, fmt, ap); fprintf (stderr, "\n"); } else vsyslog (syslog_level[level], fmt, ap); } void logmsg (int level, const char *fmt, ...) { va_list ap; va_start (ap, fmt); vlogmsg (level, fmt, ap); va_end (ap); } void die (int code, const char *fmt, ...) { va_list ap; va_start (ap, fmt); vlogmsg (LOG_CRIT, fmt, ap); va_end (ap); exit (code); } void verbose (int level, const char *fmt, ...) { va_list ap; if (verbose_level < level) return; va_start (ap, fmt); vlogmsg (L_INFO, fmt, ap); va_end (ap); } void grecs_print_diag (grecs_locus_t *locus, int err, int errcode, const char *msg) { if (locus) { if (errcode) logmsg (err ? L_ERR : L_WARNING, "%s:%lu: %s: %s", locus->file, (unsigned long)locus->line, msg, strerror (errcode)); else logmsg (err ? L_ERR : L_WARNING, "%s:%lu: %s", locus->file, (unsigned long)locus->line, msg); } else { if (errcode) logmsg (err ? L_ERR : L_WARNING, "%s: %s", msg, strerror (errcode)); else logmsg (err ? L_ERR : L_WARNING, "%s", msg); } }