]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
Refactor logging
authorMiroslav Lichvar <mlichvar@redhat.com>
Tue, 26 Nov 2013 14:48:18 +0000 (15:48 +0100)
committerMiroslav Lichvar <mlichvar@redhat.com>
Tue, 26 Nov 2013 17:40:43 +0000 (18:40 +0100)
- merge LOG_Line_Function, LOG_Fatal_Function and LOG_Position
- use C99 variadic macros for LOG and LOG_FATAL

logging.c
logging.h

index cc63f1fbcbba79d101c72a4d98748b0b5e639242..019634e3bf97a4b35970022cb532906552ee3622 100644 (file)
--- a/logging.c
+++ b/logging.c
@@ -98,78 +98,51 @@ LOG_Finalise(void)
 
 /* ================================================== */
 
-void
-LOG_Line_Function(LOG_Severity severity, LOG_Facility facility, const char *format, ...)
+static void log_message(int fatal, LOG_Severity severity, const char *message)
 {
-  char buf[2048];
-  va_list other_args;
-  va_start(other_args, format);
-  vsnprintf(buf, sizeof(buf), format, other_args);
-  va_end(other_args);
 #ifdef WINNT
   if (logfile) {
-    fprintf(logfile, "%s\n", buf);
+    fprintf(logfile, fatal ? "Fatal error : %s\n" : "%s\n", message);
   }
 #else
   if (system_log) {
+    int priority;
     switch (severity) {
       case LOGS_INFO:
-        syslog(LOG_INFO, "%s", buf);
+        priority = LOG_INFO;
         break;
       case LOGS_WARN:
-        syslog(LOG_WARNING, "%s", buf);
+        priority = LOG_WARNING;
         break;
       case LOGS_ERR:
-      default:
-        syslog(LOG_ERR, "%s", buf);
+        priority = LOG_ERR;
+        break;
+      case LOGS_FATAL:
+        priority = LOG_CRIT;
         break;
+      default:
+        assert(0);
     }
+    syslog(priority, fatal ? "Fatal error : %s" : "%s", message);
   } else {
-    fprintf(stderr, "%s\n", buf);
+    fprintf(stderr, fatal ? "Fatal error : %s\n" : "%s\n", message);
   }
 #endif
 }
 
 /* ================================================== */
 
-void
-LOG_Fatal_Function(LOG_Facility facility, const char *format, ...)
+void LOG_Message(LOG_Severity severity, LOG_Facility facility,
+                 int line_number, const char *filename,
+                 const char *function_name, const char *format, ...)
 {
   char buf[2048];
   va_list other_args;
-  va_start(other_args, format);
-  vsnprintf(buf, sizeof(buf), format, other_args);
-  va_end(other_args);
-
-#ifdef WINNT
-  if (logfile) {
-    fprintf(logfile, "Fatal error : %s\n", buf);
-  }
-#else
-  if (system_log) {
-    syslog(LOG_CRIT, "Fatal error : %s", buf);
-  } else {
-    fprintf(stderr, "Fatal error : %s\n", buf);
-  }
-  if (parent_fd) {
-    if (write(parent_fd, buf, strlen(buf) + 1) < 0)
-      ; /* Not much we can do here */
-  }
-#endif
-
-  exit(1);
-}
-
-/* ================================================== */
+  time_t t;
+  struct tm stm;
 
-void
-LOG_Position(const char *filename, int line_number, const char *function_name)
-{
 #ifdef WINNT
 #else
-  time_t t;
-  struct tm stm;
-  char buf[64];
   if (!system_log) {
     /* Don't clutter up syslog with internal debugging info */
     time(&t);
@@ -178,6 +151,31 @@ LOG_Position(const char *filename, int line_number, const char *function_name)
     fprintf(stderr, "%s:%d:(%s)[%s] ", filename, line_number, function_name, buf);
   }
 #endif
+
+  va_start(other_args, format);
+  vsnprintf(buf, sizeof(buf), format, other_args);
+  va_end(other_args);
+
+  switch (severity) {
+    case LOGS_INFO:
+    case LOGS_WARN:
+    case LOGS_ERR:
+      log_message(0, severity, buf);
+      break;
+    case LOGS_FATAL:
+      log_message(1, severity, buf);
+
+      if (parent_fd) {
+        if (write(parent_fd, buf, strlen(buf) + 1) < 0)
+          ; /* Not much we can do here */
+      }
+
+      exit(1);
+
+      break;
+    default:
+      assert(0);
+  }
 }
 
 /* ================================================== */
index 13ef41e88ddb0efde7ea1a77bc7a81538344bd3e..6f8e3f51772e814aa60fb9744f1368b046d5837c 100644 (file)
--- a/logging.h
+++ b/logging.h
 #ifndef GOT_LOGGING_H
 #define GOT_LOGGING_H
 
+/* Line logging macros.  If the compiler is GNU C, we take advantage of
+   being able to get the function name also. */
+
+#ifdef __GNUC__
+#define FUNCTION_NAME __FUNCTION__
+#else
+#define FUNCTION_NAME ""
+#endif
+
+#define LOG(severity, facility, ...) LOG_Message(severity, facility, __LINE__, __FILE__, FUNCTION_NAME, __VA_ARGS__)
+#define LOG_FATAL(facility, ...) LOG_Message(LOGS_FATAL, facility, __LINE__, __FILE__, FUNCTION_NAME, __VA_ARGS__)
+
 /* Definition of severity */
 typedef enum {
   LOGS_INFO,
   LOGS_WARN,
-  LOGS_ERR
+  LOGS_ERR,
+  LOGS_FATAL
 } LOG_Severity;
 
 /* Definition of facility.  Each message is tagged with who generated
@@ -75,13 +88,9 @@ extern void LOG_Initialise(void);
 extern void LOG_Finalise(void);
 
 /* Line logging function */
-extern void LOG_Line_Function(LOG_Severity severity, LOG_Facility facility, const char *format, ...);
-
-/* Logging function for fatal errors */
-extern void LOG_Fatal_Function(LOG_Facility facility, const char *format, ...);
-
-/* Position in code reporting function */
-extern void LOG_Position(const char *filename, int line_number, const char *function_name);
+extern void LOG_Message(LOG_Severity severity, LOG_Facility facility,
+                        int line_number, const char *filename,
+                        const char *function_name, const char *format, ...);
 
 /* Log messages to syslog instead of stderr */
 extern void LOG_OpenSystemLog(void);
@@ -95,16 +104,6 @@ extern void LOG_CloseParentFd(void);
 /* Return zero once per 10 seconds */
 extern int LOG_RateLimited(void);
 
-/* Line logging macro.  If the compiler is GNU C, we take advantage of
-   being able to get the function name also. */
-#if defined(__GNUC__)
-#define LOG LOG_Position(__FILE__, __LINE__, __FUNCTION__); LOG_Line_Function
-#define LOG_FATAL LOG_Position(__FILE__, __LINE__, __FUNCTION__); LOG_Fatal_Function
-#else
-#define LOG LOG_Position(__FILE__, __LINE__, ""); LOG_Line_Function
-#define LOG_FATAL LOG_Position(__FILE__, __LINE__, ""); LOG_Fatal_Function
-#endif /* defined (__GNUC__) */
-
 /* File logging functions */
 
 typedef int LOG_FileID;