chiark / gitweb /
Initial resample.c implementation
[disorder] / lib / log.c
index f885e880023e45a694eeabf590b1f16b43c86f4c..00ec7cd3a2a4f8039321fba3be74f3ae64bc7532 100644 (file)
--- a/lib/log.c
+++ b/lib/log.c
@@ -38,6 +38,7 @@
 #include <errno.h>
 #include <syslog.h>
 #include <sys/time.h>
+#include <time.h>
 
 #include "log.h"
 #include "disorder.h"
@@ -66,6 +67,9 @@ const char *progname;
 /** @brief Filename for debug messages */
 const char *debug_filename;
 
+/** @brief Set to include timestamps in log messages */
+int logdate;
+
 /** @brief Line number for debug messages */
 int debug_lineno;
 
@@ -119,7 +123,15 @@ static void logfp(int pri, const char *msg, void *user) {
    * sanely */
   const char *p;
   
-  if(progname)
+  if(logdate) {
+    char timebuf[64];
+    struct tm *tm;
+    gettimeofday(&tv, 0);
+    tm = localtime(&tv.tv_sec);
+    strftime(timebuf, sizeof timebuf, "%Y-%m-%d %H:%M:%S %Z", tm);
+    fprintf(fp, "%s: ", timebuf);
+  } 
+ if(progname)
     fprintf(fp, "%s: ", progname);
   if(pri <= LOG_ERR)
     fputs("ERROR: ", fp);
@@ -194,15 +206,41 @@ void elog(int pri, int errno_value, const char *fmt, va_list ap) {
   }
 }
 
-#define disorder_fatal fatal
-#define disorder_error error
-#define disorder_info info
+/** @brief Log an error and quit
+ *
+ * If @c ${DISORDER_FATAL_ABORT} is defined (as anything) then the process
+ * is aborted, so you can get a backtrace.
+ */
+void disorder_fatal(int errno_value, const char *msg, ...) {
+  va_list ap;
+
+  va_start(ap, msg);
+  elog(LOG_CRIT, errno_value, msg, ap);
+  va_end(ap);
+  if(getenv("DISORDER_FATAL_ABORT")) abort();
+  exitfn(EXIT_FAILURE);
+}
+
+/** @brief Log an error */
+void disorder_error(int errno_value, const char *msg, ...) {
+  va_list ap;
+
+  va_start(ap, msg);
+  elog(LOG_ERR, errno_value, msg, ap);
+  va_end(ap);
+}
 
-/* shared implementation of vararg functions */
-#include "log-impl.h"
+/** @brief Log an informational message */
+void disorder_info(const char *msg, ...) {
+  va_list ap;
+
+  va_start(ap, msg);
+  elog(LOG_INFO, 0, msg, ap);
+  va_end(ap);
+}
 
 /** @brief Log a debug message */
-void debug(const char *msg, ...) {
+void disorder_debug(const char *msg, ...) {
   va_list ap;
 
   va_start(ap, msg);