}
template<typename T, typename... Args>
-void dolog(std::ostream& os, const char* s, T value, Args... args)
+void dolog(std::ostream& os, const char* s, T value, Args&&... args)
{
while (*s) {
if (*s == '%') {
else {
os << value;
s += 2;
- dolog(os, s, args...);
+ dolog(os, s, std::forward<Args>(args)...);
return;
}
}
}
template<typename... Args>
-void genlog(std::ostream& stream, int level, bool doSyslog, const char* s, Args... args)
+void genlog(std::ostream& stream, int level, bool doSyslog, const char* s, Args&&... args)
{
std::ostringstream str;
- dolog(str, s, args...);
+ dolog(str, s, std::forward<Args>(args)...);
auto output = str.str();
}
template<typename... Args>
-void verboselog(const char* s, Args... args)
+void verboselog(const char* s, Args&&... args)
{
#ifdef DNSDIST
if (g_verboseStream) {
- genlog(*g_verboseStream, LOG_DEBUG, false, s, args...);
+ genlog(*g_verboseStream, LOG_DEBUG, false, s, std::forward<Args>(args)...);
}
else {
#endif /* DNSDIST */
- genlog(std::cout, LOG_DEBUG, g_syslog, s, args...);
+ genlog(std::cout, LOG_DEBUG, g_syslog, s, std::forward<Args>(args)...);
#ifdef DNSDIST
}
#endif /* DNSDIST */
#define vinfolog if (g_verbose) verboselog
template<typename... Args>
-void infolog(const char* s, Args... args)
+void infolog(const char* s, Args&&... args)
{
- genlog(std::cout, LOG_INFO, g_syslog, s, args...);
+ genlog(std::cout, LOG_INFO, g_syslog, s, std::forward<Args>(args)...);
}
template<typename... Args>
-void warnlog(const char* s, Args... args)
+void warnlog(const char* s, Args&&... args)
{
- genlog(std::cout, LOG_WARNING, g_syslog, s, args...);
+ genlog(std::cout, LOG_WARNING, g_syslog, s, std::forward<Args>(args)...);
}
template<typename... Args>
-void errlog(const char* s, Args... args)
+void errlog(const char* s, Args&&... args)
{
- genlog(std::cout, LOG_ERR, g_syslog, s, args...);
+ genlog(std::cout, LOG_ERR, g_syslog, s, std::forward<Args>(args)...);
}
#else // RECURSOR
}
template<typename T, typename... Args>
-void dolog(Logger::Urgency u, const char* s, T value, Args... args)
+void dolog(Logger::Urgency u, const char* s, T value, Args&&... args)
{
g_log << u;
while (*s) {
else {
g_log << value;
s += 2;
- dolog(s, args...);
+ dolog(s, std::forward<Args>(args)...);
return;
}
}
#define vinfolog if(g_verbose)infolog
template<typename... Args>
-void infolog(const char* s, Args... args)
+void infolog(const char* s, Args&&... args)
{
- dolog(Logger::Info, s, args...);
+ dolog(Logger::Info, s, std::forward<Args>(args)...);
}
template<typename... Args>
-void warnlog(const char* s, Args... args)
+void warnlog(const char* s, Args&&... args)
{
- dolog(Logger::Warning, s, args...);
+ dolog(Logger::Warning, s, std::forward<Args>(args)...);
}
template<typename... Args>
-void errlog(const char* s, Args... args)
+void errlog(const char* s, Args&&... args)
{
- dolog(Logger::Error, s, args...);
+ dolog(Logger::Error, s, std::forward<Args>(args)...);
}
#endif