X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=util%2Flog.hpp;h=1442faa3e00946f52d000ad6bbd815a7f46c4de9;hb=921fa70d5f91d895881c19502503cd4bd4bcabde;hp=b7f257d757536c4985bc1f8e899bfc252fb2d01e;hpb=9dc6d5dd46302302b8683ed88908d7e6a86a3acf;p=m6w6%2Flibmemcached diff --git a/util/log.hpp b/util/log.hpp index b7f257d7..1442faa3 100644 --- a/util/log.hpp +++ b/util/log.hpp @@ -22,6 +22,7 @@ #pragma once #include +#include #include #include #include @@ -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); + } } }