diff --git a/passt.c b/passt.c index 3637e48..2f538e4 100644 --- a/passt.c +++ b/passt.c @@ -795,7 +795,7 @@ int main(int argc, char **argv) } #if DEBUG - openlog("passt", LOG_PERROR, LOG_DAEMON); + openlog("passt", 0, LOG_DAEMON); #else openlog("passt", isatty(fileno(stdout)) ? 0 : LOG_PERROR, LOG_DAEMON); #endif diff --git a/util.c b/util.c index bcec7be..59a0cb2 100644 --- a/util.c +++ b/util.c @@ -22,10 +22,35 @@ #include #include #include +#include +#include #include "passt.h" #include "util.h" +#ifdef DEBUG +#define logfn(name, level) \ +void name(const char *format, ...) { \ + char ts[sizeof("Mmm dd hh:mm:ss.")]; \ + struct timespec tp; \ + struct tm *tm; \ + va_list args; \ + \ + clock_gettime(CLOCK_REALTIME, &tp); \ + tm = gmtime(&tp.tv_sec); \ + strftime(ts, sizeof(ts), "%b %d %T.", tm); \ + \ + fprintf(stderr, "%s%04lu: ", ts, tp.tv_nsec / (1000 * 1000)); \ + va_start(args, format); \ + vsyslog(level, format, args); \ + va_end(args); \ + va_start(args, format); \ + vfprintf(stderr, format, args); \ + va_end(args); \ + if (format[strlen(format)] != '\n') \ + fprintf(stderr, "\n"); \ +} +#else #define logfn(name, level) \ void name(const char *format, ...) { \ va_list args; \ @@ -34,6 +59,7 @@ void name(const char *format, ...) { \ vsyslog(level, format, args); \ va_end(args); \ } +#endif logfn(err, LOG_ERR) logfn(warn, LOG_WARNING)