Refactor out portion of Item
[m6w6/libmemcached] / util / log.hpp
index b7f257d757536c4985bc1f8e899bfc252fb2d01e..1442faa3e00946f52d000ad6bbd815a7f46c4de9 100644 (file)
@@ -22,6 +22,7 @@
 #pragma once
 
 #include <cerrno>
+#include <cstdarg>
 #include <cstdio>
 #include <fcntl.h>
 #include <iostream>
@@ -96,10 +97,10 @@ struct log_info_st
           if (opt_syslog)
           {
             char buffer[1024];
-            getcwd(buffer, sizeof(buffer));
+            char *getcwd_ret= getcwd(buffer, sizeof(buffer));
             syslog(LOG_ERR, "Could not open log file \"%.*s\", from \"%s\", open failed with (%s)", 
                    int(filename.size()), filename.c_str(), 
-                   buffer,
+                   getcwd_ret,
                    strerror(errno));
           }
           std::cerr << "Could not open log file for writing, switching to stderr." << std::endl;
@@ -124,23 +125,32 @@ struct log_info_st
     return fd;
   }
 
-  void write(verbose_t verbose, const char *mesg)
+  void write(verbose_t verbose, const char *format, ...)
   {
-    if (opt_file)
+    if (opt_file or opt_syslog)
     {
-      char buffer[UTIL_MAX_ERROR_SIZE];
-      int buffer_length= snprintf(buffer, sizeof(buffer), "%7s %s\n", verbose_name(verbose), mesg);
-      if (::write(file(), buffer, buffer_length) == -1)
+      va_list args;
+      va_start(args, format);
+      char mesg[BUFSIZ];
+      int mesg_length= vsnprintf(mesg, sizeof(mesg), format, args);
+      va_end(args);
+
+      if (opt_file)
       {
-        std::cerr << "Could not write to log file." << std::endl;
-        syslog(LOG_EMERG, "gearmand could not open log file %s, got error %s", filename.c_str(), strerror(errno));
-      }
+        char buffer[UTIL_MAX_ERROR_SIZE];
+        int buffer_length= snprintf(buffer, sizeof(buffer), "%7s %.*s\n", verbose_name(verbose), mesg_length, mesg);
+        if (::write(file(), buffer, buffer_length) == -1)
+        {
+          std::cerr << "Could not write to log file." << std::endl;
+          syslog(LOG_EMERG, "gearmand could not open log file %s, got error %s", filename.c_str(), strerror(errno));
+        }
 
-    }
+      }
 
-    if (opt_syslog)
-    {
-      syslog(int(verbose), "%7s %s", verbose_name(verbose), mesg);
+      if (opt_syslog)
+      {
+        syslog(int(verbose), "%7s %.*s", verbose_name(verbose), mesg_length, mesg);
+      }
     }
   }