if (msg && msg[strlen(msg)-1] == '\n') msg[strlen(msg)-1] = '\0';
switch (slm->priority) {
- case LOG_EMERG: log_warnx("snmp[emerg]: %s", msg?msg:slm->msg); break;
- case LOG_ALERT: log_warnx("snmp[alert]: %s", msg?msg:slm->msg); break;
- case LOG_CRIT: log_warnx("snmp[crit]: %s", msg?msg:slm->msg); break;
- case LOG_ERR: log_warnx("snmp[err]: %s", msg?msg:slm->msg); break;
- case LOG_WARNING: log_warnx("snmp[warning]: %s", msg?msg:slm->msg); break;
- case LOG_NOTICE: log_info ("snmp[notice]: %s", msg?msg:slm->msg); break;
- case LOG_INFO: log_info ("snmp[info]: %s", msg?msg:slm->msg); break;
- case LOG_DEBUG: log_debug("snmp[debug]: %s", msg?msg:slm->msg); break;
+ case LOG_EMERG: log_warnx("snmp", "%s", msg?msg:slm->msg); break;
+ case LOG_ALERT: log_warnx("snmp", "%s", msg?msg:slm->msg); break;
+ case LOG_CRIT: log_warnx("snmp", "%s", msg?msg:slm->msg); break;
+ case LOG_ERR: log_warnx("snmp", "%s", msg?msg:slm->msg); break;
+ case LOG_WARNING: log_warnx("snmp", "%s", msg?msg:slm->msg); break;
+ case LOG_NOTICE: log_info ("snmp", "%s", msg?msg:slm->msg); break;
+ case LOG_INFO: log_info ("snmp", "%s", msg?msg:slm->msg); break;
+ case LOG_DEBUG: log_debug("snmp", "%s", msg?msg:slm->msg); break;
}
free(msg);
return SNMP_ERR_NOERROR;
/* Logging can be modified by providing an appropriate log handler. */
static void (*logh)(int severity, const char *msg) = NULL;
-static void vlog(int, const char *, va_list);
+static void vlog(int, const char *, const char *, va_list);
static void logit(int, const char *, ...);
void
va_list ap;
va_start(ap, fmt);
- vlog(pri, fmt, ap);
+ vlog(pri, NULL, fmt, ap);
va_end(ap);
}
switch (tty) {
case 1:
switch (priority) {
- case LOG_EMERG: return "\033[1;37;41m[EMRG]\033[0m";
- case LOG_ALERT: return "\033[1;37;41m[ALRT]\033[0m";
- case LOG_CRIT: return "\033[1;37;41m[CRIT]\033[0m";
- case LOG_ERR: return "\033[1;31m[ ERR]\033[0m";
- case LOG_WARNING: return "\033[1;33m[WARN]\033[0m";
- case LOG_NOTICE: return "\033[1;34m[NOTI]\033[0m";
- case LOG_INFO: return "\033[1;34m[INFO]\033[0m";
- case LOG_DEBUG: return "\033[1;30m[ DBG]\033[0m";
+ case LOG_EMERG: return "\033[1;37;41m[EMRG";
+ case LOG_ALERT: return "\033[1;37;41m[ALRT";
+ case LOG_CRIT: return "\033[1;37;41m[CRIT";
+ case LOG_ERR: return "\033[1;31m[ ERR";
+ case LOG_WARNING: return "\033[1;33m[WARN";
+ case LOG_NOTICE: return "\033[1;34m[NOTI";
+ case LOG_INFO: return "\033[1;34m[INFO";
+ case LOG_DEBUG: return "\033[1;30m[ DBG";
}
break;
default:
switch (priority) {
- case LOG_EMERG: return "[EMRG]";
- case LOG_ALERT: return "[ALRT]";
- case LOG_CRIT: return "[CRIT]";
- case LOG_ERR: return "[ ERR]";
- case LOG_WARNING: return "[WARN]";
- case LOG_NOTICE: return "[NOTI]";
- case LOG_INFO: return "[INFO]";
- case LOG_DEBUG: return "[ DBG]";
+ case LOG_EMERG: return "[EMRG";
+ case LOG_ALERT: return "[ALRT";
+ case LOG_CRIT: return "[CRIT";
+ case LOG_ERR: return "[ ERR";
+ case LOG_WARNING: return "[WARN";
+ case LOG_NOTICE: return "[NOTI";
+ case LOG_INFO: return "[INFO";
+ case LOG_DEBUG: return "[ DBG";
}
}
return "[UNKN]";
}
static void
-vlog(int pri, const char *fmt, va_list ap)
+vlog(int pri, const char *token, const char *fmt, va_list ap)
{
if (logh) {
char *result;
if (debug || logh) {
char *nfmt;
/* best effort in out of mem situations */
- if (asprintf(&nfmt, "%s %s %s\n",
+ if (asprintf(&nfmt, "%s %s%s%s]%s %s\n",
date(),
translate(STDERR_FILENO, pri),
+ token ? "/" : "", token ? token : "",
+ isatty(STDERR_FILENO) ? "\033[0m" : "",
fmt) == -1) {
vfprintf(stderr, fmt, ap);
fprintf(stderr, "\n");
void
-log_warn(const char *emsg, ...)
+log_warn(const char *token, const char *emsg, ...)
{
char *nfmt;
va_list ap;
if (asprintf(&nfmt, "%s: %s", emsg, strerror(errno)) == -1) {
/* we tried it... */
- vlog(LOG_WARNING, emsg, ap);
+ vlog(LOG_WARNING, token, emsg, ap);
logit(LOG_WARNING, "%s", strerror(errno));
} else {
- vlog(LOG_WARNING, nfmt, ap);
+ vlog(LOG_WARNING, token, nfmt, ap);
free(nfmt);
}
va_end(ap);
}
void
-log_warnx(const char *emsg, ...)
+log_warnx(const char *token, const char *emsg, ...)
{
va_list ap;
va_start(ap, emsg);
- vlog(LOG_WARNING, emsg, ap);
+ vlog(LOG_WARNING, token, emsg, ap);
va_end(ap);
}
void
-log_info(const char *emsg, ...)
+log_info(const char *token, const char *emsg, ...)
{
va_list ap;
if (debug > 1 || logh) {
va_start(ap, emsg);
- vlog(LOG_INFO, emsg, ap);
+ vlog(LOG_INFO, token, emsg, ap);
va_end(ap);
}
}
void
-log_debug(const char *emsg, ...)
+log_debug(const char *token, const char *emsg, ...)
{
va_list ap;
if (debug > 2 || logh) {
va_start(ap, emsg);
- vlog(LOG_DEBUG, emsg, ap);
+ vlog(LOG_DEBUG, token, emsg, ap);
va_end(ap);
}
}
#define _LOG_H
/* log.c */
+#include <string.h>
+#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
+
void log_init(int, const char *);
-void log_warn(const char *, ...) __attribute__ ((format (printf, 1, 2)));
-#define LLOG_WARN(x,...) log_warn("%s: " x, __FUNCTION__ , ## __VA_ARGS__)
-void log_warnx(const char *, ...) __attribute__ ((format (printf, 1, 2)));
-#define LLOG_WARNX(x,...) log_warnx("%s: " x, __FUNCTION__ , ## __VA_ARGS__)
-void log_info(const char *, ...) __attribute__ ((format (printf, 1, 2)));
-#define LLOG_INFO(x,...) log_info("%s: " x, __FUNCTION__ , ## __VA_ARGS__)
-void log_debug(const char *, ...) __attribute__ ((format (printf, 1, 2)));
-#define LLOG_DEBUG(x,...) log_debug("%s: " x, __FUNCTION__ , ## __VA_ARGS__)
+void log_warn(const char *, const char *, ...) __attribute__ ((format (printf, 2, 3)));
+#define LLOG_WARN(x,...) log_warn(__FILENAME__, x, ## __VA_ARGS__)
+void log_warnx(const char *, const char *, ...) __attribute__ ((format (printf, 2, 3)));
+#define LLOG_WARNX(x,...) log_warnx(__FILENAME__, x, ## __VA_ARGS__)
+void log_info(const char *, const char *, ...) __attribute__ ((format (printf, 2, 3)));
+#define LLOG_INFO(x,...) log_info(__FILENAME__, x, ## __VA_ARGS__)
+void log_debug(const char *, const char *, ...) __attribute__ ((format (printf, 2, 3)));
+#define LLOG_DEBUG(x,...) log_debug(__FILENAME__, x, ## __VA_ARGS__)
void fatal(const char *);
void fatalx(const char *);