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