CLICommand::ParseCommand(argc, argv, visibleDesc, hiddenDesc, positionalDesc,
vm, cmdname, command, autocomplete);
} catch (const std::exception& ex) {
- std::ostringstream msgbuf;
- msgbuf << "Error while parsing command-line options: " << ex.what();
- Log(LogCritical, "icinga-app", msgbuf.str());
+ Log(LogCritical, "icinga-app")
+ << "Error while parsing command-line options: " << ex.what();
return EXIT_FAILURE;
}
if (!gr) {
if (errno == 0) {
- std::ostringstream msgbuf;
- msgbuf << "Invalid group specified: " + group;
- Log(LogCritical, "cli", msgbuf.str());
+ Log(LogCritical, "cli")
+ << "Invalid group specified: " << group;
return EXIT_FAILURE;
} else {
- std::ostringstream msgbuf;
- msgbuf << "getgrnam() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "cli", msgbuf.str());
+ Log(LogCritical, "cli")
+ << "getgrnam() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
return EXIT_FAILURE;
}
}
if (getgid() != gr->gr_gid) {
if (!vm.count("reload-internal") && setgroups(0, NULL) < 0) {
- std::ostringstream msgbuf;
- msgbuf << "setgroups() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "cli", msgbuf.str());
+ Log(LogCritical, "cli")
+ << "setgroups() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
return EXIT_FAILURE;
}
if (setgid(gr->gr_gid) < 0) {
- std::ostringstream msgbuf;
- msgbuf << "setgid() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "cli", msgbuf.str());
+ Log(LogCritical, "cli")
+ << "setgid() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
return EXIT_FAILURE;
}
}
if (!pw) {
if (errno == 0) {
- std::ostringstream msgbuf;
- msgbuf << "Invalid user specified: " + user;
- Log(LogCritical, "cli", msgbuf.str());
+ Log(LogCritical, "cli")
+ << "Invalid user specified: " << user;
return EXIT_FAILURE;
} else {
- std::ostringstream msgbuf;
- msgbuf << "getpwnam() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "cli", msgbuf.str());
+ Log(LogCritical, "cli")
+ << "getpwnam() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
return EXIT_FAILURE;
}
}
// also activate the additional groups the configured user is member of
if (getuid() != pw->pw_uid) {
if (!vm.count("reload-internal") && initgroups(user.CStr(), pw->pw_gid) < 0) {
- std::ostringstream msgbuf;
- msgbuf << "initgroups() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "cli", msgbuf.str());
+ Log(LogCritical, "cli")
+ << "initgroups() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
return EXIT_FAILURE;
}
if (setuid(pw->pw_uid) < 0) {
- std::ostringstream msgbuf;
- msgbuf << "setuid() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "cli", msgbuf.str());
+ Log(LogCritical, "cli")
+ << "setuid() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
return EXIT_FAILURE;
}
}
if (abs(timeDiff) > 15) {
/* We made a significant jump in time. */
- std::ostringstream msgbuf;
- msgbuf << "We jumped "
- << (timeDiff < 0 ? "forward" : "backward")
- << " in time: " << abs(timeDiff) << " seconds";
- Log(LogInformation, "Application", msgbuf.str());
+ Log(LogInformation, "Application")
+ << "We jumped "
+ << (timeDiff < 0 ? "forward" : "backward")
+ << " in time: " << abs(timeDiff) << " seconds";
Timer::AdjustTimers(-timeDiff);
}
try {
UpdatePidFile(GetPidPath());
} catch (const std::exception&) {
- Log(LogCritical, "Application", "Cannot update PID file '" + GetPidPath() + "'. Aborting.");
+ Log(LogCritical, "Application")
+ << "Cannot update PID file '" << GetPidPath() << "'. Aborting.";
return false;
}
m_PidFile = fopen(filename.CStr(), "w");
if (m_PidFile == NULL) {
- Log(LogCritical, "Application", "Could not open PID file '" + filename + "'.");
+ Log(LogCritical, "Application")
+ << "Could not open PID file '" << filename << "'.";
BOOST_THROW_EXCEPTION(std::runtime_error("Could not open PID file '" + filename + "'"));
}
}
if (ftruncate(fd, 0) < 0) {
- std::ostringstream msgbuf;
- msgbuf << "ftruncate() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "Application", msgbuf.str());
+ Log(LogCritical, "Application")
+ << "ftruncate() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
BOOST_THROW_EXCEPTION(posix_error()
<< boost::errinfo_api_function("ftruncate")
void DynamicObject::DumpObjects(const String& filename, int attributeTypes)
{
- Log(LogInformation, "DynamicObject", "Dumping program state to file '" + filename + "'");
+ Log(LogInformation, "DynamicObject")
+ << "Dumping program state to file '" << filename << "'";
String tempFilename = filename + ".tmp";
ASSERT(!object->IsActive());
#ifdef _DEBUG
- Log(LogDebug, "DynamicObject", "Restoring object '" + name + "' of type '" + type + "'.");
+ Log(LogDebug, "DynamicObject")
+ << "Restoring object '" << name << "' of type '" << type << "'.";
#endif /* _DEBUG */
Dictionary::Ptr update = persistentObject->Get("update");
Deserialize(object, update, false, attributeTypes);
void DynamicObject::RestoreObjects(const String& filename, int attributeTypes)
{
- Log(LogInformation, "DynamicObject", "Restoring program state from file '" + filename + "'");
+ Log(LogInformation, "DynamicObject")
+ << "Restoring program state from file '" << filename << "'";
std::fstream fp;
fp.open(filename.CStr(), std::ios_base::in);
upq.Join();
- std::ostringstream msgbuf;
- msgbuf << "Restored " << restored << " objects";
- Log(LogInformation, "DynamicObject", msgbuf.str());
+ Log(LogInformation, "DynamicObject")
+ << "Restored " << restored << " objects";
}
void DynamicObject::StopObjects(void)
* @param facility The log facility.
* @param message The message.
*/
-void icinga::Log(LogSeverity severity, const String& facility,
+void icinga::IcingaLog(LogSeverity severity, const String& facility,
const String& message)
{
LogEntry entry;
#include "base/i2-base.hpp"
#include "base/logger.thpp"
#include <set>
+#include <sstream>
namespace icinga
{
const String& message);
};
+I2_BASE_API void IcingaLog(LogSeverity severity, const String& facility, const String& message);
+
+class Log
+{
+public:
+ inline Log(LogSeverity severity, const String& facility, const String& message)
+ : m_Severity(severity), m_Facility(facility)
+ {
+ m_Buffer << message;
+ }
+
+ inline Log(LogSeverity severity, const String& facility)
+ : m_Severity(severity), m_Facility(facility)
+ { }
+
+ inline ~Log(void)
+ {
+ IcingaLog(m_Severity, m_Facility, m_Buffer.str());
+ }
+
+ template<typename T>
+ Log& operator<<(const T& val)
+ {
+ m_Buffer << val;
+ return *this;
+ }
+
+private:
+ LogSeverity m_Severity;
+ String m_Facility;
+ std::ostringstream m_Buffer;
+};
+
}
#endif /* LOGGER_H */
m_FD = outReadPipe;
m_PID = pi.dwProcessId;
- Log(LogNotice, "Process", "Running command " + PrettyPrintArguments(m_Arguments) +
- ": PID " + Convert::ToString(m_PID));
+ Log(LogNotice, "Process")
+ << "Running command " << PrettyPrintArguments(m_Arguments) << ": PID " << m_PID;
#else /* _WIN32 */
int fds[2];
m_PID = m_Process;
- Log(LogNotice, "Process", "Running command " + PrettyPrintArguments(m_Arguments) +
- ": PID " + Convert::ToString(m_PID));
+ Log(LogNotice, "Process")
+ << "Running command " << PrettyPrintArguments(m_Arguments) <<": PID " << m_PID;
// free arguments
for (int i = 0; argv[i] != NULL; i++)
double timeout = m_Result.ExecutionStart + m_Timeout;
if (timeout < Utility::GetTime()) {
- Log(LogWarning, "Process", "Killing process " + Convert::ToString(m_PID) +
- " (" + PrettyPrintArguments(m_Arguments) + ") after timeout of " +
- Convert::ToString(m_Timeout) + " seconds");
+ Log(LogWarning, "Process")
+ << "Killing process " << m_PID << " (" << PrettyPrintArguments(m_Arguments)
+ << ") after timeout of " << m_Timeout << " seconds";
m_OutputStream << "<Timeout exceeded.>";
#ifdef _WIN32
DWORD exitcode;
GetExitCodeProcess(m_Process, &exitcode);
- Log(LogNotice, "Process", "PID " + Convert::ToString(m_PID) +
- " (" + PrettyPrintArguments(m_Arguments) + ") terminated with exit code " +
- Convert::ToString(exitcode));
+ Log(LogNotice, "Process")
+ << "PID " << m_PID << " (" << PrettyPrintArguments(m_Arguments) << ") terminated with exit code " << exitcode;
#else /* _WIN32 */
int status, exitcode;
if (waitpid(m_Process, &status, 0) != m_Process) {
if (WIFEXITED(status)) {
exitcode = WEXITSTATUS(status);
- Log(LogNotice, "Process", "PID " + Convert::ToString(m_PID) +
- " (" + PrettyPrintArguments(m_Arguments) + ") terminated with exit code " +
- Convert::ToString(exitcode));
+ Log(LogNotice, "Process")
+ << "PID " << m_PID << " (" << PrettyPrintArguments(m_Arguments) << ") terminated with exit code " << exitcode;
} else if (WIFSIGNALED(status)) {
- Log(LogWarning, "Process", "PID " + Convert::ToString(m_PID) + " was terminated by signal " +
- Convert::ToString(WTERMSIG(status)));
+ Log(LogWarning, "Process")
+ << "PID " << m_PID << " was terminated by signal " << WTERMSIG(status);
std::ostringstream outputbuf;
outputbuf << "<Terminated by signal " << WTERMSIG(status) << ".>";
if (getnameinfo(address, len, host, sizeof(host), service,
sizeof(service), NI_NUMERICHOST | NI_NUMERICSERV) < 0) {
#ifndef _WIN32
- std::ostringstream msgbuf;
- msgbuf << "getnameinfo() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "Socket", msgbuf.str());
+ Log(LogCritical, "Socket")
+ << "getnameinfo() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("getnameinfo")
<< boost::errinfo_errno(errno));
#else /* _WIN32 */
- std::ostringstream msgbuf;
- msgbuf << "getnameinfo() failed with error code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
- Log(LogCritical, "Socket", msgbuf.str());
+ Log(LogCritical, "Socket")
+ << "getnameinfo() failed with error code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("getnameinfo")
if (getsockname(GetFD(), (sockaddr *)&sin, &len) < 0) {
#ifndef _WIN32
- std::ostringstream msgbuf;
- msgbuf << "getsockname() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "Socket", msgbuf.str());
+ Log(LogCritical, "Socket")
+ << "getsockname() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("getsockname")
<< boost::errinfo_errno(errno));
#else /* _WIN32 */
- std::ostringstream msgbuf;
- msgbuf << "getsockname() failed with error code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
- Log(LogCritical, "Socket", msgbuf.str());
+ Log(LogCritical, "Socket")
+ << "getsockname() failed with error code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("getsockname")
if (getpeername(GetFD(), (sockaddr *)&sin, &len) < 0) {
#ifndef _WIN32
- std::ostringstream msgbuf;
- msgbuf << "getpeername() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "Socket", msgbuf.str());
+ Log(LogCritical, "Socket")
+ << "getpeername() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("getpeername")
<< boost::errinfo_errno(errno));
#else /* _WIN32 */
- std::ostringstream msgbuf;
- msgbuf << "getpeername() failed with error code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
- Log(LogCritical, "Socket", msgbuf.str());
+ Log(LogCritical, "Socket")
+ << "getpeername() failed with error code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("getpeername")
{
if (listen(GetFD(), SOMAXCONN) < 0) {
#ifndef _WIN32
- std::ostringstream msgbuf;
- msgbuf << "listen() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "Socket", msgbuf.str());
+ Log(LogCritical, "Socket")
+ << "listen() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("listen")
<< boost::errinfo_errno(errno));
#else /* _WIN32 */
- std::ostringstream msgbuf;
- msgbuf << "listen() failed with error code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
- Log(LogCritical, "Socket", msgbuf.str());
+ Log(LogCritical, "Socket")
+ << "listen() failed with error code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("listen")
if (rc < 0) {
#ifndef _WIN32
- std::ostringstream msgbuf;
- msgbuf << "send() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "Socket", msgbuf.str());
+ Log(LogCritical, "Socket")
+ << "send() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("send")
<< boost::errinfo_errno(errno));
#else /* _WIN32 */
- std::ostringstream msgbuf;
- msgbuf << "send() failed with error code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
- Log(LogCritical, "Socket", msgbuf.str());
+ Log(LogCritical, "Socket")
+ << "send() failed with error code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("send")
if (rc < 0) {
#ifndef _WIN32
- std::ostringstream msgbuf;
- msgbuf << "recv() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "Socket", msgbuf.str());
+ Log(LogCritical, "Socket")
+ << "recv() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("recv")
<< boost::errinfo_errno(errno));
#else /* _WIN32 */
- std::ostringstream msgbuf;
- msgbuf << "recv() failed with error code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
- Log(LogCritical, "Socket", msgbuf.str());
+ Log(LogCritical, "Socket")
+ << "recv() failed with error code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("recv")
if (fd < 0) {
#ifndef _WIN32
- std::ostringstream msgbuf;
- msgbuf << "accept() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "Socket", msgbuf.str());
+ Log(LogCritical, "Socket")
+ << "accept() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("accept")
<< boost::errinfo_errno(errno));
#else /* _WIN32 */
- std::ostringstream msgbuf;
- msgbuf << "accept() failed with error code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
- Log(LogCritical, "Socket", msgbuf.str());
+ Log(LogCritical, "Socket")
+ << "accept() failed with error code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("accept")
rc = select(GetFD() + 1, &readfds, &writefds, &exceptfds, NULL);
if (rc < 0) {
- std::ostringstream msgbuf;
- msgbuf << "select() failed with error code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
- Log(LogCritical, "Socket", msgbuf.str());
+ Log(LogCritical, "Socket")
+ << "select() failed with error code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("select")
rc = poll(&pfd, 1, -1);
if (rc < 0) {
- std::ostringstream msgbuf;
- msgbuf << "poll() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "Socket", msgbuf.str());
+ Log(LogCritical, "Socket")
+ << "poll() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("poll")
service.CStr(), &hints, &result);
if (rc != 0) {
- std::ostringstream msgbuf;
- msgbuf << "getaddrinfo() failed with error code " << rc << ", \"" << gai_strerror(rc) << "\"";
- Log(LogCritical, "TcpSocket", msgbuf.str());
+ Log(LogCritical, "TcpSocket")
+ << "getaddrinfo() failed with error code " << rc << ", \"" << gai_strerror(rc) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("getaddrinfo")
freeaddrinfo(result);
if (GetFD() == INVALID_SOCKET) {
- std::ostringstream msgbuf;
- msgbuf << "Invalid socket: " << Utility::FormatErrorNumber(error);
- Log(LogCritical, "TcpSocket", msgbuf.str());
+ Log(LogCritical, "TcpSocket")
+ << "Invalid socket: " << Utility::FormatErrorNumber(error);
#ifndef _WIN32
BOOST_THROW_EXCEPTION(socket_error()
int rc = getaddrinfo(node.CStr(), service.CStr(), &hints, &result);
if (rc != 0) {
- std::ostringstream msgbuf;
- msgbuf << "getaddrinfo() failed with error code " << rc << ", \"" << gai_strerror(rc) << "\"";
- Log(LogCritical, "TcpSocket", msgbuf.str());
+ Log(LogCritical, "TcpSocket")
+ << "getaddrinfo() failed with error code " << rc << ", \"" << gai_strerror(rc) << "\"";
BOOST_THROW_EXCEPTION(socket_error()
<< boost::errinfo_api_function("getaddrinfo")
freeaddrinfo(result);
if (GetFD() == INVALID_SOCKET) {
- std::ostringstream msgbuf;
- msgbuf << "Invalid socket: " << Utility::FormatErrorNumber(error);
- Log(LogCritical, "TcpSocket", msgbuf.str());
+ Log(LogCritical, "TcpSocket")
+ << "Invalid socket: " << Utility::FormatErrorNumber(error);
#ifndef _WIN32
BOOST_THROW_EXCEPTION(socket_error()
if (wi.Callback)
wi.Callback();
} catch (const std::exception& ex) {
- std::ostringstream msgbuf;
- msgbuf << "Exception thrown in event handler: " << std::endl
- << DiagnosticInformation(ex);
-
- Log(LogCritical, "ThreadPool", msgbuf.str());
+ Log(LogCritical, "ThreadPool")
+ << "Exception thrown in event handler:\n"
+ << DiagnosticInformation(ex);
} catch (...) {
Log(LogCritical, "ThreadPool", "Exception of unknown type thrown in event handler.");
}
int divctx = usage_end.ru_nivcsw - usage_start.ru_nivcsw;
# endif /* RUSAGE_THREAD */
if (et - st > 0.5) {
- std::ostringstream msgbuf;
+ Log(LogWarning, "ThreadPool")
# ifdef RUSAGE_THREAD
- msgbuf << "Event call took user:" << duser << "s, system:" << dsys << "s, wait:" << dwait << "s, minor_faults:" << dminfaults << ", major_faults:" << dmajfaults << ", voluntary_csw:" << dvctx << ", involuntary_csw:" << divctx;
+ << "Event call took user:" << duser << "s, system:" << dsys << "s, wait:" << dwait << "s, minor_faults:" << dminfaults << ", major_faults:" << dmajfaults << ", voluntary_csw:" << dvctx << ", involuntary_csw:" << divctx;
# else
- msgbuf << "Event call took " << (et - st) << "s";
+ << "Event call took " << (et - st) << "s";
# endif /* RUSAGE_THREAD */
-
- Log(LogWarning, "ThreadPool", msgbuf.str());
}
#endif /* _DEBUG */
}
tthreads = m_MaxThreads / (sizeof(m_Queues) / sizeof(m_Queues[0])) - alive;
if (tthreads != 0) {
- std::ostringstream msgbuf;
- msgbuf << "Thread pool; current: " << alive << "; adjustment: " << tthreads;
- Log(LogNotice, "ThreadPool", msgbuf.str());
+ Log(LogNotice, "ThreadPool")
+ << "Thread pool; current: " << alive << "; adjustment: " << tthreads;
}
for (int i = 0; i < -tthreads; i++)
if (lastStats < now - 15) {
lastStats = now;
- std::ostringstream msgbuf;
- msgbuf << "Pool #" << m_ID << ": Pending tasks: " << total_pending << "; Average latency: "
- << (long)(total_avg_latency * 1000 / (sizeof(m_Queues) / sizeof(m_Queues[0]))) << "ms"
- << "; Threads: " << total_alive
- << "; Pool utilization: " << (total_utilization / (sizeof(m_Queues) / sizeof(m_Queues[0]))) << "%";
- Log(LogNotice, "ThreadPool", msgbuf.str());
+ Log(LogNotice, "ThreadPool")
+ << "Pool #" << m_ID << ": Pending tasks: " << total_pending << "; Average latency: "
+ << (long)(total_avg_latency * 1000 / (sizeof(m_Queues) / sizeof(m_Queues[0]))) << "ms"
+ << "; Threads: " << total_alive
+ << "; Pool utilization: " << (total_utilization / (sizeof(m_Queues) / sizeof(m_Queues[0]))) << "%";
}
}
}
SSL_CTX_set_mode(sslContext.get(), SSL_MODE_ENABLE_PARTIAL_WRITE | SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);
if (!SSL_CTX_use_certificate_chain_file(sslContext.get(), pubkey.CStr())) {
- msgbuf << "Error with public key file '" << pubkey << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Error with public key file '" << pubkey << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
BOOST_THROW_EXCEPTION(openssl_error()
<< boost::errinfo_api_function("SSL_CTX_use_certificate_chain_file")
<< errinfo_openssl_error(ERR_peek_error())
}
if (!SSL_CTX_use_PrivateKey_file(sslContext.get(), privkey.CStr(), SSL_FILETYPE_PEM)) {
- msgbuf << "Error with private key file '" << privkey << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Error with private key file '" << privkey << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
BOOST_THROW_EXCEPTION(openssl_error()
<< boost::errinfo_api_function("SSL_CTX_use_PrivateKey_file")
<< errinfo_openssl_error(ERR_peek_error())
}
if (!SSL_CTX_check_private_key(sslContext.get())) {
- msgbuf << "Error checking private key '" << privkey << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Error checking private key '" << privkey << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
BOOST_THROW_EXCEPTION(openssl_error()
<< boost::errinfo_api_function("SSL_CTX_check_private_key")
<< errinfo_openssl_error(ERR_peek_error()));
if (!cakey.IsEmpty()) {
if (!SSL_CTX_load_verify_locations(sslContext.get(), cakey.CStr(), NULL)) {
- msgbuf << "Error loading and verifying locations in ca key file '" << cakey << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Error loading and verifying locations in ca key file '" << cakey << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
BOOST_THROW_EXCEPTION(openssl_error()
<< boost::errinfo_api_function("SSL_CTX_load_verify_locations")
<< errinfo_openssl_error(ERR_peek_error())
cert_names = SSL_load_client_CA_file(cakey.CStr());
if (cert_names == NULL) {
- msgbuf << "Error loading client ca key file '" << cakey << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Error loading client ca key file '" << cakey << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
BOOST_THROW_EXCEPTION(openssl_error()
<< boost::errinfo_api_function("SSL_load_client_CA_file")
<< errinfo_openssl_error(ERR_peek_error())
*/
void AddCRLToSSLContext(const shared_ptr<SSL_CTX>& context, const String& crlPath)
{
- std::ostringstream msgbuf;
char errbuf[120];
X509_STORE *x509_store = SSL_CTX_get_cert_store(context.get());
lookup = X509_STORE_add_lookup(x509_store, X509_LOOKUP_file());
if (!lookup) {
- msgbuf << "Error adding X509 store lookup: " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Error adding X509 store lookup: " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
BOOST_THROW_EXCEPTION(openssl_error()
- << boost::errinfo_api_function("X509_STORE_add_lookup")
- << errinfo_openssl_error(ERR_peek_error()));
+ << boost::errinfo_api_function("X509_STORE_add_lookup")
+ << errinfo_openssl_error(ERR_peek_error()));
}
if (X509_LOOKUP_load_file(lookup, crlPath.CStr(), X509_FILETYPE_PEM) != 0) {
- msgbuf << "Error loading crl file '" << crlPath << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Error loading crl file '" << crlPath << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
BOOST_THROW_EXCEPTION(openssl_error()
- << boost::errinfo_api_function("X509_LOOKUP_load_file")
- << errinfo_openssl_error(ERR_peek_error())
- << boost::errinfo_file_name(crlPath));
+ << boost::errinfo_api_function("X509_LOOKUP_load_file")
+ << errinfo_openssl_error(ERR_peek_error())
+ << boost::errinfo_file_name(crlPath));
}
X509_VERIFY_PARAM *param = X509_VERIFY_PARAM_new();
*/
String GetCertificateCN(const shared_ptr<X509>& certificate)
{
- std::ostringstream msgbuf;
char errbuf[120];
char buffer[256];
NID_commonName, buffer, sizeof(buffer));
if (rc == -1) {
- msgbuf << "Error with x509 NAME getting text by NID: " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Error with x509 NAME getting text by NID: " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
BOOST_THROW_EXCEPTION(openssl_error()
<< boost::errinfo_api_function("X509_NAME_get_text_by_NID")
<< errinfo_openssl_error(ERR_peek_error()));
*/
shared_ptr<X509> GetX509Certificate(const String& pemfile)
{
- std::ostringstream msgbuf;
char errbuf[120];
X509 *cert;
BIO *fpcert = BIO_new(BIO_s_file());
if (fpcert == NULL) {
- msgbuf << "Error creating new BIO: " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Error creating new BIO: " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
BOOST_THROW_EXCEPTION(openssl_error()
<< boost::errinfo_api_function("BIO_new")
<< errinfo_openssl_error(ERR_peek_error()));
}
if (BIO_read_filename(fpcert, pemfile.CStr()) < 0) {
- msgbuf << "Error reading pem file '" << pemfile << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Error reading pem file '" << pemfile << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
BOOST_THROW_EXCEPTION(openssl_error()
<< boost::errinfo_api_function("BIO_read_filename")
<< errinfo_openssl_error(ERR_peek_error())
cert = PEM_read_bio_X509_AUX(fpcert, NULL, NULL, NULL);
if (cert == NULL) {
- msgbuf << "Error on bio X509 AUX reading pem file '" << pemfile << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Error on bio X509 AUX reading pem file '" << pemfile << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
BOOST_THROW_EXCEPTION(openssl_error()
<< boost::errinfo_api_function("PEM_read_bio_X509_AUX")
<< errinfo_openssl_error(ERR_peek_error())
RSA *rsa = RSA_generate_key(4096, RSA_F4, NULL, NULL);
- Log(LogInformation, "base", "Writing private key to '" + keyfile + "'.");
+ Log(LogInformation, "base")
+ << "Writing private key to '" << keyfile << "'.";
BIO *bio = BIO_new_file(const_cast<char *>(keyfile.CStr()), "w");
PEM_write_bio_RSAPrivateKey(bio, rsa, NULL, NULL, 0, NULL, NULL);
X509_NAME_free(subject);
- Log(LogInformation, "base", "Writing X509 certificate to '" + certfile + "'.");
+ Log(LogInformation, "base")
+ << "Writing X509 certificate to '" << certfile << "'.";
bio = BIO_new(BIO_s_file());
BIO_write_filename(bio, const_cast<char *>(certfile.CStr()));
X509_REQ_sign(req, key, EVP_sha1());
- Log(LogInformation, "base", "Writing certificate signing request to '" + csrfile + "'.");
+ Log(LogInformation, "base")
+ << "Writing certificate signing request to '" << csrfile << "'.";
bio = BIO_new(BIO_s_file());
BIO_write_filename(bio, const_cast<char *>(csrfile.CStr()));
shared_ptr<X509> CreateCertIcingaCA(EVP_PKEY *pubkey, X509_NAME *subject)
{
- std::stringstream msgbuf;
char errbuf[120];
String cadir = GetIcingaCADir();
BIO *cakeybio = BIO_new_file(const_cast<char *>(cakeyfile.CStr()), "r");
if (!cakeybio) {
- msgbuf << "Could not open CA key file '" << cakeyfile << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Could not open CA key file '" << cakeyfile << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
return shared_ptr<X509>();
}
rsa = PEM_read_bio_RSAPrivateKey(cakeybio, NULL, NULL, NULL);
if (!rsa) {
- msgbuf << "Could not read RSA key from CA key file '" << cakeyfile << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Could not read RSA key from CA key file '" << cakeyfile << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
return shared_ptr<X509>();
}
String SHA256(const String& s)
{
- std::ostringstream msgbuf;
char errbuf[120];
SHA256_CTX context;
unsigned char digest[SHA256_DIGEST_LENGTH];
if (!SHA256_Init(&context)) {
- msgbuf << "Error on SHA256 Init: " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Error on SHA256 Init: " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
BOOST_THROW_EXCEPTION(openssl_error()
- << boost::errinfo_api_function("SHA256_Init")
- << errinfo_openssl_error(ERR_peek_error()));
+ << boost::errinfo_api_function("SHA256_Init")
+ << errinfo_openssl_error(ERR_peek_error()));
}
if (!SHA256_Update(&context, (unsigned char*)s.CStr(), s.GetLength())) {
- msgbuf << "Error on SHA256 Update: " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Error on SHA256 Update: " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
BOOST_THROW_EXCEPTION(openssl_error()
- << boost::errinfo_api_function("SHA256_Update")
- << errinfo_openssl_error(ERR_peek_error()));
+ << boost::errinfo_api_function("SHA256_Update")
+ << errinfo_openssl_error(ERR_peek_error()));
}
if (!SHA256_Final(digest, &context)) {
- msgbuf << "Error on SHA256 Final: " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Error on SHA256 Final: " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
BOOST_THROW_EXCEPTION(openssl_error()
- << boost::errinfo_api_function("SHA256_Final")
- << errinfo_openssl_error(ERR_peek_error()));
+ << boost::errinfo_api_function("SHA256_Final")
+ << errinfo_openssl_error(ERR_peek_error()));
}
char output[SHA256_DIGEST_LENGTH*2+1];
path = "lib" + library + ".so";
#endif /* _WIN32 */
- Log(LogInformation, "Utility", "Loading library '" + path + "'");
+ Log(LogInformation, "Utility")
+ << "Loading library '" << path << "'";
#ifdef _WIN32
HMODULE hModule = LoadLibrary(path.CStr());
{
boost::mutex::scoped_lock lock(m_Mutex);
- Log(LogNotice, "WorkQueue", "#" + Convert::ToString(m_ID) + " items: " + Convert::ToString(m_Items.size()));
+ Log(LogNotice, "WorkQueue")
+ << "#" << m_ID << " items: " << m_Items.size();
}
void WorkQueue::WorkerThreadProc(void)
int AgentListCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
if (!ap.empty()) {
- Log(LogWarning, "cli", "Ignoring parameters: " + boost::algorithm::join(ap, " "));
+ Log(LogWarning, "cli")
+ << "Ignoring parameters: " << boost::algorithm::join(ap, " ");
}
return 0;
int AgentSetupCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
if (!ap.empty()) {
- Log(LogWarning, "cli", "Ignoring parameters: " + boost::algorithm::join(ap, " "));
+ Log(LogWarning, "cli")
+ << "Ignoring parameters: " << boost::algorithm::join(ap, " ");
}
return 0;
int AgentUpdateConfigCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
if (!ap.empty()) {
- Log(LogWarning, "cli", "Ignoring parameters: " + boost::algorithm::join(ap, " "));
+ Log(LogWarning, "cli")
+ << "Ignoring parameters: " << boost::algorithm::join(ap, " ");
}
return 0;
int AgentWizardCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
if (!ap.empty()) {
- Log(LogWarning, "cli", "Ignoring parameters: " + boost::algorithm::join(ap, " "));
+ Log(LogWarning, "cli")
+ << "Ignoring parameters: " << boost::algorithm::join(ap, " ");
}
return 0;
static String LoadAppType(const String& typeSpec)
{
- Log(LogInformation, "cli", "Loading application type: " + typeSpec);
+ Log(LogInformation, "cli")
+ << "Loading application type: " << typeSpec;
String::SizeType index = typeSpec.FindFirstOf('/');
else
severity = LogCritical;
- Log(severity, "config", Convert::ToString(errors) + " errors, " + Convert::ToString(warnings) + " warnings.");
+ Log(severity, "config")
+ << errors << " errors, " << warnings << " warnings.";
}
if (!result)
Log(LogCritical, "cli", "The daemon could not be started. See log output for details.");
exit(EXIT_FAILURE);
} else if (ret == -1) {
- std::ostringstream msgbuf;
- msgbuf << "waitpid() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "cli", msgbuf.str());
+ Log(LogCritical, "cli")
+ << "waitpid() failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
exit(EXIT_FAILURE);
}
Application::MakeVariablesConstant();
- Log(LogInformation, "cli", "Icinga application loader (version: " + Application::GetVersion() + ")");
+ Log(LogInformation, "cli")
+ << "Icinga application loader (version: " << Application::GetVersion() << ")";
String appType = LoadAppType(Application::GetApplicationType());
if (!vm.count("validate") && !vm.count("reload-internal")) {
pid_t runningpid = Application::ReadPidFile(Application::GetPidPath());
if (runningpid > 0) {
- Log(LogCritical, "cli", "Another instance of Icinga already running with PID " + Convert::ToString(runningpid));
+ Log(LogCritical, "cli")
+ << "Another instance of Icinga already running with PID " << runningpid;
return EXIT_FAILURE;
}
}
if(vm.count("reload-internal")) {
int parentpid = vm["reload-internal"].as<int>();
- Log(LogInformation, "cli", "Terminating previous instance of Icinga (PID " + Convert::ToString(parentpid) + ")");
+ Log(LogInformation, "cli")
+ << "Terminating previous instance of Icinga (PID " << parentpid << ")";
TerminateAndWaitForEnd(parentpid);
Log(LogInformation, "cli", "Previous instance has ended, taking over now.");
}
}
if (!Utility::PathExists(features_enabled_dir) ) {
- Log(LogCritical, "cli", "Cannot disable features. Path '" + features_enabled_dir + "' does not exist.");
+ Log(LogCritical, "cli")
+ << "Cannot disable features. Path '" << features_enabled_dir << "' does not exist.";
return 0;
}
String target = features_enabled_dir + "/" + feature + ".conf";
if (!Utility::PathExists(target) ) {
- Log(LogCritical, "cli", "Cannot disable feature '" + feature + "'. Target file '" + target + "' does not exist.");
+ Log(LogCritical, "cli")
+ << "Cannot disable feature '" << feature << "'. Target file '" << target << "' does not exist.";
errors.push_back(feature);
continue;
}
if (unlink(target.CStr()) < 0) {
- Log(LogCritical, "cli", "Cannot disable feature '" + feature + "'. Unlinking target file '" + target +
- "' failed with error code " + Convert::ToString(errno) + ", \"" + Utility::FormatErrorNumber(errno) + "\".");
+ Log(LogCritical, "cli")
+ << "Cannot disable feature '" << feature << "'. Unlinking target file '" << target
+ << "' failed with error code " << errno << ", \"" + Utility::FormatErrorNumber(errno) << "\".";
errors.push_back(feature);
continue;
}
}
if (!errors.empty()) {
- Log(LogCritical, "cli", "Cannot disable feature(s): " + boost::algorithm::join(errors, " "));
+ Log(LogCritical, "cli")
+ << "Cannot disable feature(s): " << boost::algorithm::join(errors, " ");
errors.clear();
return 1;
}
}
if (!Utility::PathExists(features_available_dir) ) {
- Log(LogCritical, "cli", "Cannot parse available features. Path '" + features_available_dir + "' does not exist.");
+ Log(LogCritical, "cli")
+ << "Cannot parse available features. Path '" << features_available_dir << "' does not exist.";
return 0;
}
if (!Utility::PathExists(features_enabled_dir) ) {
- Log(LogCritical, "cli", "Cannot enable features. Path '" + features_enabled_dir + "' does not exist.");
+ Log(LogCritical, "cli")
+ << "Cannot enable features. Path '" << features_enabled_dir << "' does not exist.";
return 0;
}
String source = features_available_dir + "/" + feature + ".conf";
if (!Utility::PathExists(source) ) {
- Log(LogCritical, "cli", "Cannot enable feature '" + feature + "'. Source file '" + source + "' does not exist.");
+ Log(LogCritical, "cli")
+ << "Cannot enable feature '" << feature << "'. Source file '" << source + "' does not exist.";
errors.push_back(feature);
continue;
}
String target = features_enabled_dir + "/" + feature + ".conf";
if (Utility::PathExists(target) ) {
- Log(LogWarning, "cli", "Feature '" + feature + "' already enabled.");
+ Log(LogWarning, "cli")
+ << "Feature '" << feature << "' already enabled.";
continue;
}
#ifndef _WIN32
if (symlink(source.CStr(), target.CStr()) < 0) {
- Log(LogCritical, "cli", "Cannot enable feature '" + feature + "'. Linking source '" + source + "' to target file '" + target +
- "' failed with error code " + Convert::ToString(errno) + ", \"" + Utility::FormatErrorNumber(errno) + "\".");
+ Log(LogCritical, "cli")
+ << "Cannot enable feature '" << feature << "'. Linking source '" << source << "' to target file '" << target
+ << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\".";
errors.push_back(feature);
continue;
}
std::ofstream fp;
fp.open(target.CStr());
if (!fp) {
- Log(LogCritical, "cli", "Cannot enable feature '" + feature + "'. Failed to open file '" + target + "'.");
+ Log(LogCritical, "cli")
+ << "Cannot enable feature '" << feature << "'. Failed to open file '" << target << "'.";
errors.push_back(feature);
continue;
}
}
if (!errors.empty()) {
- Log(LogCritical, "cli", "Cannot enable feature(s): " + boost::algorithm::join(errors, " "));
+ Log(LogCritical, "cli")
+ << "Cannot enable feature(s): " << boost::algorithm::join(errors, " ");
errors.clear();
return 1;
}
int FeatureListCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
if (!ap.empty()) {
- Log(LogWarning, "cli", "Ignoring parameters: " + boost::algorithm::join(ap, " "));
+ Log(LogWarning, "cli")
+ << "Ignoring parameters: " << boost::algorithm::join(ap, " ");
}
std::vector<String> available_features;
if (!Utility::Glob(path + "/*.conf",
boost::bind(&FeatureUtility::CollectFeatures, _1, boost::ref(features)), GlobFile)) {
- Log(LogCritical, "cli", "Cannot access path '" + path + "'.");
+ Log(LogCritical, "cli")
+ << "Cannot access path '" << path << "'.";
return false;
}
}
String feature = Utility::BaseName(feature_file);
boost::algorithm::replace_all(feature, ".conf", "");
- Log(LogDebug, "cli", "Adding feature: " + feature);
+ Log(LogDebug, "cli")
+ << "Adding feature: " << feature;
features.push_back(feature);
}
int ObjectListCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
if (!ap.empty()) {
- Log(LogWarning, "cli", "Ignoring parameters: " + boost::algorithm::join(ap, " "));
+ Log(LogWarning, "cli")
+ << "Ignoring parameters: " << boost::algorithm::join(ap, " ");
}
String objectfile = Application::GetObjectsPath();
if (!Utility::PathExists(objectfile)) {
- Log(LogCritical, "cli", "Cannot parse objects file '" + Application::GetObjectsPath() + "'.");
+ Log(LogCritical, "cli")
+ << "Cannot open objects file '" << Application::GetObjectsPath() << "'.";
Log(LogCritical, "cli", "Run 'icinga2 daemon -C' to validate config and generate the cache file.");
return 1;
}
std::cout << "\n";
}
- Log(LogNotice, "cli", "Parsed " + Convert::ToString(objects_count) + " objects.");
+ Log(LogNotice, "cli")
+ << "Parsed " << objects_count << " objects.";
return 0;
}
String cadir = Application::GetLocalStateDir() + "/lib/icinga2/ca";
if (Utility::PathExists(cadir)) {
- Log(LogCritical, "base", "CA directory '" + cadir + "' already exists.");
+ Log(LogCritical, "base")
+ << "CA directory '" << cadir << "' already exists.";
return 1;
}
if (!Utility::MkDirP(cadir, 0700)) {
- Log(LogCritical, "base", "Could not create CA directory '" + cadir + "'.");
+ Log(LogCritical, "base")
+ << "Could not create CA directory '" << cadir << "'.";
return 1;
}
String serialpath = cadir + "/serial.txt";
- Log(LogInformation, "cli", "Initializing serial file in '" + serialpath + "'.");
+ Log(LogInformation, "cli")
+ << "Initializing serial file in '" << serialpath << "'.";
std::ofstream fp;
fp.open(serialpath.CStr());
fpcert.open(certfile.CStr());
if (!fpcert) {
- Log(LogCritical, "cli", "Could not open certificate file '" + certfile + "' for writing.");
+ Log(LogCritical, "cli")
+ << "Could not open certificate file '" << certfile << "' for writing.";
return 1;
}
fpca.open(cafile.CStr());
if (!fpcert) {
- Log(LogCritical, "cli", "Could not open CA certificate file '" + cafile + "' for writing.");
+ Log(LogCritical, "cli")
+ << "Could not open CA certificate file '" << cafile << "' for writing.";
return 1;
}
X509_REQ *req = PEM_read_bio_X509_REQ(csrbio, NULL, NULL, NULL);
if (!req) {
- msgbuf << "Could not read X509 certificate request from '" + csrfile + "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
- Log(LogCritical, "SSL", msgbuf.str());
+ Log(LogCritical, "SSL")
+ << "Could not read X509 certificate request from '" << csrfile << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
return 1;
}
fpcert.open(certfile.CStr());
if (!fpcert) {
- Log(LogCritical, "cli", "Failed to open certificate file '" + certfile + "' for output");
+ Log(LogCritical, "cli")
+ << "Failed to open certificate file '" << certfile << "' for output";
return 1;
}
Host::Ptr host = Host::GetByName(attrs["host_name"]);
if (!host) {
- Log(LogWarning, "CheckResultReader", "Ignoring checkresult file for host '" + attrs["host_name"] +
- "': Host does not exist.");
+ Log(LogWarning, "CheckResultReader")
+ << "Ignoring checkresult file for host '" << attrs["host_name"] << "': Host does not exist.";
return;
}
Service::Ptr service = host->GetServiceByShortName(attrs["service_description"]);
if (!service) {
- Log(LogWarning, "CheckResultReader", "Ignoring checkresult file for host '" + attrs["host_name"] +
- "', service '" + attrs["service_description"] + "': Service does not exist.");
+ Log(LogWarning, "CheckResultReader")
+ << "Ignoring checkresult file for host '" << attrs["host_name"]
+ << "', service '" << attrs["service_description"] << "': Service does not exist.";
return;
}
service->ProcessCheckResult(result);
- Log(LogDebug, "CheckResultReader", "Processed checkresult file for host '" + attrs["host_name"] +
- "', service '" + attrs["service_description"] + "'");
+ Log(LogDebug, "CheckResultReader")
+ << "Processed checkresult file for host '" << attrs["host_name"]
+ << "', service '" << attrs["service_description"] << "'";
{
ObjectLock olock(service);
flapping_state_str = "DISABLED";
break;
default:
- Log(LogCritical, "CompatLogger", "Unknown flapping state: " + Convert::ToString(flapping_state));
+ Log(LogCritical, "CompatLogger")
+ << "Unknown flapping state: " << flapping_state;
return;
}
if (rotate) {
String archiveFile = GetLogDir() + "/archives/icinga-" + Utility::FormatDateTime("%m-%d-%Y-%H", Utility::GetTime()) + ".log";
- Log(LogNotice, "CompatLogger", "Rotating compat log file '" + tempFile + "' -> '" + archiveFile + "'");
+ Log(LogNotice, "CompatLogger")
+ << "Rotating compat log file '" << tempFile << "' -> '" << archiveFile << "'";
+
(void) rename(tempFile.CStr(), archiveFile.CStr());
}
}
m_OutputFile.open(tempFile.CStr(), std::ofstream::app);
- if (!m_OutputFile.good()) {
- Log(LogWarning, "CompatLogger", "Could not open compat log file '" + tempFile + "' for writing. Log output will be lost.");
+ if (!m_OutputFile) {
+ Log(LogWarning, "CompatLogger")
+ << "Could not open compat log file '" << tempFile << "' for writing. Log output will be lost.";
return;
}
time_t ts = mktime(&tmthen);
- Log(LogNotice, "CompatLogger", "Rescheduling rotation timer for compat log '"
- + GetName() + "' to '" + Utility::FormatDateTime("%Y/%m/%d %H:%M:%S %z", ts) + "'");
+ Log(LogNotice, "CompatLogger")
+ << "Rescheduling rotation timer for compat log '"
+ << GetName() << "' to '" << Utility::FormatDateTime("%Y/%m/%d %H:%M:%S %z", ts) << "'";
+
m_RotationTimer->Reschedule(ts);
}
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP;
if (!fifo_ok && mkfifo(commandPath.CStr(), S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP) < 0) {
- std::ostringstream msgbuf;
- msgbuf << "mkfifo() for fifo path '" << commandPath << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "ExternalCommandListener", msgbuf.str());
+ Log(LogCritical, "ExternalCommandListener")
+ << "mkfifo() for fifo path '" << commandPath << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
return;
}
/* mkfifo() uses umask to mask off some bits, which means we need to chmod() the
* fifo to get the right mask. */
if (chmod(commandPath.CStr(), mode) < 0) {
- std::ostringstream msgbuf;
- msgbuf << "chmod() on fifo '" << commandPath << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "ExternalCommandListener", msgbuf.str());
+ Log(LogCritical, "ExternalCommandListener")
+ << "chmod() on fifo '" << commandPath << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
return;
}
} while (fd < 0 && errno == EINTR);
if (fd < 0) {
- std::ostringstream msgbuf;
- msgbuf << "open() for fifo path '" << commandPath << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "ExternalCommandListener", msgbuf.str());
+ Log(LogCritical, "ExternalCommandListener")
+ << "open() for fifo path '" << commandPath << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
return;
}
FILE *fp = fdopen(fd, "r");
if (fp == NULL) {
- std::ostringstream msgbuf;
- msgbuf << "fdopen() for fifo path '" << commandPath << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "ExternalCommandListener", msgbuf.str());
+ Log(LogCritical, "ExternalCommandListener")
+ << "fdopen() for fifo path '" << commandPath << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
return;
}
String command = line;
try {
- Log(LogInformation, "ExternalCommandListener", "Executing external command: " + command);
+ Log(LogInformation, "ExternalCommandListener")
+ << "Executing external command: " << command;
ExternalCommandProcessor::Execute(command);
} catch (const std::exception& ex) {
- std::ostringstream msgbuf;
- msgbuf << "External command failed." << DiagnosticInformation(ex);
- Log(LogWarning, "ExternalCommandListener", msgbuf.str());
+ Log(LogWarning, "ExternalCommandListener")
+ << "External command failed." << DiagnosticInformation(ex);
}
}
Checkable::Ptr parent = dep->GetParent();
if (!parent) {
- Log(LogDebug, "StatusDataWriter", "Missing parent for dependency '" + dep->GetName() + "'.");
+ Log(LogDebug, "StatusDataWriter")
+ << "Missing parent for dependency '" << dep->GetName() << "'.";
continue;
}
Checkable::Ptr child = dep->GetChild();
if (!child) {
+ Log(LogDebug, "StatusDataWriter")
+ << "Missing child for dependency '" << dep->GetName() << "'.";
continue;
- Log(LogDebug, "StatusDataWriter", "Missing child for dependency '" + dep->GetName() + "'.");
}
Host::Ptr child_host;
<< boost::errinfo_file_name(statuspathtmp));
}
- Log(LogNotice, "StatusDataWriter", "Writing status.dat file took " + Utility::FormatDuration(Utility::GetTime() - start));
+ Log(LogNotice, "StatusDataWriter")
+ << "Writing status.dat file took " << Utility::FormatDuration(Utility::GetTime() - start);
}
<< boost::errinfo_errno(errno)
<< boost::errinfo_file_name(path));
- Log(LogInformation, "ConfigCompiler", "Compiling config file: " + path);
+ Log(LogInformation, "ConfigCompiler")
+ << "Compiling config file: " << path;
return CompileStream(path, &stream, zone);
}
*/
void ConfigCompiler::AddIncludeSearchDir(const String& dir)
{
- Log(LogInformation, "ConfigCompiler", "Adding include search dir: " + dir);
+ Log(LogInformation, "ConfigCompiler")
+ << "Adding include search dir: " << dir;
m_IncludeSearchDirs.push_back(dir);
}
ASSERT(!OwnsLock());
#ifdef _DEBUG
- Log(LogDebug, "ConfigItem", "Commit called for ConfigItem Type=" + GetType() + ", Name=" + GetName());
+ Log(LogDebug, "ConfigItem")
+ << "Commit called for ConfigItem Type=" << GetType() << ", Name=" << GetName();
#endif /* _DEBUG */
/* Make sure the type is valid. */
void ConfigItem::WriteObjectsFile(const String& filename)
{
- Log(LogInformation, "ConfigItem", "Dumping config items to file '" + filename + "'");
+ Log(LogInformation, "ConfigItem")
+ << "Dumping config items to file '" << filename << "'";
String tempFilename = filename + ".tmp";
BOOST_FOREACH(const DynamicType::Ptr& type, DynamicType::GetTypes()) {
int count = std::distance(type->GetObjects().first, type->GetObjects().second);
if (count > 0)
- Log(LogInformation, "ConfigItem", "Checked " + Convert::ToString(count) + " " + type->GetName() + "(s).");
+ Log(LogInformation, "ConfigItem")
+ << "Checked " << count << " " << type->GetName() << "(s).";
}
return !ConfigCompilerContext::GetInstance()->HasErrors();
try {
DynamicObject::RestoreObjects(Application::GetStatePath());
} catch (const std::exception& ex) {
- Log(LogCritical, "ConfigItem", "Failed to restore state file: " + DiagnosticInformation(ex));
+ Log(LogCritical, "ConfigItem")
+ << "Failed to restore state file: " << DiagnosticInformation(ex);
}
Log(LogInformation, "ConfigItem", "Triggering Start signal for config items");
continue;
#ifdef _DEBUG
- Log(LogDebug, "ConfigItem", "Activating object '" + object->GetName() + "' of type '" + object->GetType()->GetName() + "'");
+ Log(LogDebug, "ConfigItem")
+ << "Activating object '" << object->GetName() << "' of type '" << object->GetType()->GetName() << "'";
#endif /* _DEBUG */
upq.Enqueue(boost::bind(&DynamicObject::Activate, object));
}
if (m_Operator != &Expression::OpLiteral) {
std::ostringstream msgbuf;
ShowCodeFragment(msgbuf, m_DebugInfo, false);
- Log(LogDebug, "Expression", "Executing:\n" + msgbuf.str());
+ Log(LogDebug, "Expression")
+ << "Executing:\n" << msgbuf.str();
}
#endif /* _DEBUG */
DynamicObject::OnConfigLoaded();
if (!GetEnableHa()) {
- Log(LogDebug, "DbConnection", "HA functionality disabled. Won't pause IDO connection: " + GetName());
+ Log(LogDebug, "DbConnection")
+ << "HA functionality disabled. Won't pause IDO connection: " << GetName();
+
SetHAMode(HARunEverywhere);
}
}
{
DynamicObject::Resume();
- Log(LogInformation, "DbConnection", "Resuming IDO connection: " + GetName());
+ Log(LogInformation, "DbConnection")
+ << "Resuming IDO connection: " << GetName();
m_CleanUpTimer = make_shared<Timer>();
m_CleanUpTimer->SetInterval(60);
{
DynamicObject::Pause();
- Log(LogInformation, "DbConnection", "Pausing IDO connection: " + GetName());
+ Log(LogInformation, "DbConnection")
+ << "Pausing IDO connection: " << GetName();
m_CleanUpTimer.reset();
}
BOOST_FOREACH(const Dictionary::Pair& kv, vars) {
if (!kv.first.IsEmpty()) {
- Log(LogDebug, "DbConnection", "icinga application customvar key: '" + kv.first + "' value: '" + Convert::ToString(kv.second) + "'");
+ Log(LogDebug, "DbConnection")
+ << "icinga application customvar key: '" << kv.first << "' value: '" << kv.second << "'";
Dictionary::Ptr fields4 = make_shared<Dictionary>();
fields4->Set("varname", Convert::ToString(kv.first));
continue;
CleanUpExecuteQuery(tables[i].name, tables[i].time_column, now - max_age);
- Log(LogNotice, "DbConnection", "Cleanup (" + tables[i].name + "): " + Convert::ToString(max_age) +
- " now: " + Convert::ToString(now) +
- " old: " + Convert::ToString(now - max_age));
+ Log(LogNotice, "DbConnection")
+ << "Cleanup (" << tables[i].name << "): " << max_age
+ << " now: " << now
+ << " old: " << now - max_age;
}
}
return;
}
- Log(LogDebug, "DbEvents", "adding service comment (id = " + Convert::ToString(comment->GetLegacyId()) + ") for '" + checkable->GetName() + "'");
+ Log(LogDebug, "DbEvents")
+ << "adding service comment (id = " << comment->GetLegacyId() << ") for '" << checkable->GetName() << "'";
/* add the service comment */
AddCommentByType(checkable, comment, historical);
void DbEvents::RemoveComments(const Checkable::Ptr& checkable)
{
- Log(LogDebug, "DbEvents", "removing service comments for '" + checkable->GetName() + "'");
+ Log(LogDebug, "DbEvents")
+ << "removing service comments for '" << checkable->GetName() << "'";
DbQuery query1;
query1.Table = "comments";
return;
}
- Log(LogDebug, "DbEvents", "removing service comment (id = " + Convert::ToString(comment->GetLegacyId()) + ") for '" + checkable->GetName() + "'");
+ Log(LogDebug, "DbEvents")
+ << "removing service comment (id = " << comment->GetLegacyId() << ") for '" << checkable->GetName() << "'";
/* Status */
DbQuery query1;
return;
}
- Log(LogDebug, "DbEvents", "adding service downtime (id = " + Convert::ToString(downtime->GetLegacyId()) + ") for '" + checkable->GetName() + "'");
+ Log(LogDebug, "DbEvents")
+ << "adding service downtime (id = " << downtime->GetLegacyId() << ") for '" << checkable->GetName() << "'";
/* add the downtime */
AddDowntimeByType(checkable, downtime, historical);}
void DbEvents::RemoveDowntimes(const Checkable::Ptr& checkable)
{
- Log(LogDebug, "DbEvents", "removing service downtimes for '" + checkable->GetName() + "'");
+ Log(LogDebug, "DbEvents")
+ << "removing service downtimes for '" << checkable->GetName() << "'";
DbQuery query1;
query1.Table = "scheduleddowntime";
return;
}
- Log(LogDebug, "DbEvents", "removing service downtime (id = " + Convert::ToString(downtime->GetLegacyId()) + ") for '" + checkable->GetName() + "'");
+ Log(LogDebug, "DbEvents")
+ << "removing service downtime (id = " << downtime->GetLegacyId() << ") for '" << checkable->GetName() << "'";
/* Status */
DbQuery query1;
return;
}
- Log(LogDebug, "DbEvents", "updating triggered service downtime (id = " + Convert::ToString(downtime->GetLegacyId()) + ") for '" + checkable->GetName() + "'");
+ Log(LogDebug, "DbEvents")
+ << "updating triggered service downtime (id = " << downtime->GetLegacyId() << ") for '" << checkable->GetName() << "'";
double now = Utility::GetTime();
std::pair<unsigned long, unsigned long> time_bag = CompatUtility::ConvertTimestamp(now);
void DbEvents::AddAcknowledgementHistory(const Checkable::Ptr& checkable, const String& author, const String& comment,
AcknowledgementType type, double expiry)
{
- Log(LogDebug, "DbEvents", "add acknowledgement history for '" + checkable->GetName() + "'");
+ Log(LogDebug, "DbEvents")
+ << "add acknowledgement history for '" << checkable->GetName() << "'";
double now = Utility::GetTime();
std::pair<unsigned long, unsigned long> time_bag = CompatUtility::ConvertTimestamp(now);
void DbEvents::AddAcknowledgement(const Checkable::Ptr& checkable, AcknowledgementType type)
{
- Log(LogDebug, "DbEvents", "add acknowledgement for '" + checkable->GetName() + "'");
+ Log(LogDebug, "DbEvents")
+ << "add acknowledgement for '" << checkable->GetName() << "'";
AddAcknowledgementInternal(checkable, type, true);
}
void DbEvents::RemoveAcknowledgement(const Checkable::Ptr& checkable)
{
- Log(LogDebug, "DbEvents", "remove acknowledgement for '" + checkable->GetName() + "'");
+ Log(LogDebug, "DbEvents")
+ << "remove acknowledgement for '" << checkable->GetName() << "'";
AddAcknowledgementInternal(checkable, AcknowledgementNone, false);
}
void DbEvents::AddNotificationHistory(const Notification::Ptr& notification, const Checkable::Ptr& checkable, const std::set<User::Ptr>& users, NotificationType type,
const CheckResult::Ptr& cr, const String& author, const String& text)
{
- Log(LogDebug, "DbEvents", "add notification history for '" + checkable->GetName() + "'");
+ Log(LogDebug, "DbEvents")
+ << "add notification history for '" << checkable->GetName() << "'";
/* start and end happen at the same time */
double now = Utility::GetTime();
/* filtered users */
BOOST_FOREACH(const User::Ptr& user, users) {
- Log(LogDebug, "DbEvents", "add contact notification history for service '" + checkable->GetName() + "' and user '" + user->GetName() + "'.");
+ Log(LogDebug, "DbEvents")
+ << "add contact notification history for service '" << checkable->GetName() << "' and user '" << user->GetName() << "'.";
Dictionary::Ptr fields2 = make_shared<Dictionary>();
fields2->Set("contact_object_id", user);
/* statehistory */
void DbEvents::AddStateChangeHistory(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr, StateType type)
{
- Log(LogDebug, "DbEvents", "add state change history for '" + checkable->GetName() + "'");
+ Log(LogDebug, "DbEvents")
+ << "add state change history for '" << checkable->GetName() << "'";
double now = Utility::GetTime();
std::pair<unsigned long, unsigned long> time_bag = CompatUtility::ConvertTimestamp(now);
type = LogEntryTypeServiceCritical;
break;
default:
- Log(LogCritical, "DbEvents", "Unknown service state: " + Convert::ToString(state_after));
+ Log(LogCritical, "DbEvents")
+ << "Unknown service state: " << state_after;
return;
}
} else {
type = LogEntryTypeHostDown;
break;
default:
- Log(LogCritical, "DbEvents", "Unknown host state: " + Convert::ToString(state_after));
+ Log(LogCritical, "DbEvents")
+ << "Unknown host state: " << state_after;
return;
}
flapping_state_str = "DISABLED";
break;
default:
- Log(LogCritical, "DbEvents", "Unknown flapping state: " + Convert::ToString(flapping_state));
+ Log(LogCritical, "DbEvents")
+ << "Unknown flapping state: " << flapping_state;
return;
}
void DbEvents::AddLogHistory(const Checkable::Ptr& checkable, String buffer, LogEntryType type)
{
- Log(LogDebug, "DbEvents", "add log entry history for '" + checkable->GetName() + "'");
+ Log(LogDebug, "DbEvents")
+ << "add log entry history for '" << checkable->GetName() << "'";
double now = Utility::GetTime();
std::pair<unsigned long, unsigned long> time_bag = CompatUtility::ConvertTimestamp(now);
/* flappinghistory */
void DbEvents::AddFlappingHistory(const Checkable::Ptr& checkable, FlappingState flapping_state)
{
- Log(LogDebug, "DbEvents", "add flapping history for '" + checkable->GetName() + "'");
+ Log(LogDebug, "DbEvents")
+ << "add flapping history for '" << checkable->GetName() << "'";
double now = Utility::GetTime();
std::pair<unsigned long, unsigned long> time_bag = CompatUtility::ConvertTimestamp(now);
fields1->Set("reason_type", 2);
break;
default:
- Log(LogDebug, "DbEvents", "Unhandled flapping state: " + Convert::ToString(flapping_state));
+ Log(LogDebug, "DbEvents")
+ << "Unhandled flapping state: " << flapping_state;
return;
}
if (!cr)
return;
- Log(LogDebug, "DbEvents", "add service check history for '" + checkable->GetName() + "'");
+ Log(LogDebug, "DbEvents")
+ << "add service check history for '" << checkable->GetName() << "'";
Host::Ptr host;
Service::Ptr service;
/* eventhandlers */
void DbEvents::AddEventHandlerHistory(const Checkable::Ptr& checkable)
{
- Log(LogDebug, "DbEvents", "add eventhandler history for '" + checkable->GetName() + "'");
+ Log(LogDebug, "DbEvents")
+ << "add eventhandler history for '" << checkable->GetName() << "'";
double now = Utility::GetTime();
std::pair<unsigned long, unsigned long> time_bag = CompatUtility::ConvertTimestamp(now);
if (GetType()->GetTable() != "endpoint") {
String node = IcingaApplication::GetInstance()->GetNodeName();
- Log(LogDebug, "DbObject", "Endpoint node: '" + node + "' status update for '" + GetObject()->GetName() + "'");
+ Log(LogDebug, "DbObject")
+ << "Endpoint node: '" << node << "' status update for '" << GetObject()->GetName() << "'";
Endpoint::Ptr endpoint = Endpoint::GetByName(node);
if (endpoint)
Dictionary::Ptr vars = CompatUtility::GetCustomAttributeConfig(custom_var_object);
if (vars) {
- Log(LogDebug, "DbObject", "Updating object vars for '" + custom_var_object->GetName() + "'");
+ Log(LogDebug, "DbObject")
+ << "Updating object vars for '" << custom_var_object->GetName() << "'";
ObjectLock olock (vars);
if (!kv.first.IsEmpty()) {
int overridden = custom_var_object->IsVarOverridden(kv.first) ? 1 : 0;
- Log(LogDebug, "DbObject", "object customvar key: '" + kv.first + "' value: '" + Convert::ToString(kv.second) +
- "' overridden: " + Convert::ToString(overridden));
+ Log(LogDebug, "DbObject")
+ << "object customvar key: '" << kv.first << "' value: '" << kv.second
+ << "' overridden: " << overridden;
Dictionary::Ptr fields = make_shared<Dictionary>();
fields->Set("varname", Convert::ToString(kv.first));
Dictionary::Ptr vars = CompatUtility::GetCustomAttributeConfig(custom_var_object);
if (vars) {
- Log(LogDebug, "DbObject", "Updating object vars for '" + custom_var_object->GetName() + "'");
+ Log(LogDebug, "DbObject")
+ << "Updating object vars for '" << custom_var_object->GetName() << "'";
ObjectLock olock (vars);
if (!kv.first.IsEmpty()) {
int overridden = custom_var_object->IsVarOverridden(kv.first) ? 1 : 0;
- Log(LogDebug, "DbObject", "object customvar key: '" + kv.first + "' value: '" + Convert::ToString(kv.second) +
- "' overridden: " + Convert::ToString(overridden));
+ Log(LogDebug, "DbObject")
+ << "object customvar key: '" << kv.first << "' value: '" << kv.second
+ << "' overridden: " << overridden;
Dictionary::Ptr fields = make_shared<Dictionary>();
fields->Set("varname", Convert::ToString(kv.first));
{
DbObject::Ptr dbobj = GetOrCreateByObject(object);
- Log(LogDebug, "DbObject", "Vars changed for object '" + object->GetName() + "'");
+ Log(LogDebug, "DbObject")
+ << "Vars changed for object '" << object->GetName() << "'";
if (!dbobj)
return;
Dictionary::Ptr fields = make_shared<Dictionary>();
Endpoint::Ptr endpoint = static_pointer_cast<Endpoint>(GetObject());
- Log(LogDebug, "EndpointDbObject", "update status for endpoint '" + endpoint->GetName() + "'");
+ Log(LogDebug, "EndpointDbObject")
+ << "update status for endpoint '" << endpoint->GetName() << "'";
fields->Set("identity", endpoint->GetName());
fields->Set("node", IcingaApplication::GetInstance()->GetNodeName());
{
bool connected = EndpointIsConnected(endpoint);
- Log(LogDebug, "EndpointDbObject", "update is_connected=" + Convert::ToString(connected ? 1 : 0) + " for endpoint '" + endpoint->GetName() + "'");
+ Log(LogDebug, "EndpointDbObject")
+ << "update is_connected=" << connected << " for endpoint '" << endpoint->GetName() << "'";
DbQuery query1;
query1.Table = "endpointstatus";
if (!parent)
continue;
- Log(LogDebug, "HostDbObject", "host parents: " + parent->GetName());
+ Log(LogDebug, "HostDbObject")
+ << "host parents: " << parent->GetName();
/* parents: host_id, parent_host_object_id */
Dictionary::Ptr fields1 = make_shared<Dictionary>();
}
/* host dependencies */
- Log(LogDebug, "HostDbObject", "host dependencies for '" + host->GetName() + "'");
+ Log(LogDebug, "HostDbObject")
+ << "host dependencies for '" << host->GetName() << "'";
BOOST_FOREACH(const Dependency::Ptr& dep, host->GetDependencies()) {
Checkable::Ptr parent = dep->GetParent();
if (!parent) {
- Log(LogDebug, "HostDbObject", "Missing parent for dependency '" + dep->GetName() + "'.");
+ Log(LogDebug, "HostDbObject")
+ << "Missing parent for dependency '" << dep->GetName() << "'.";
continue;
}
int state_filter = dep->GetStateFilter();
- Log(LogDebug, "HostDbObject", "parent host: " + parent->GetName());
+ Log(LogDebug, "HostDbObject")
+ << "parent host: " << parent->GetName();
Dictionary::Ptr fields2 = make_shared<Dictionary>();
fields2->Set("host_object_id", parent);
OnQuery(query2);
}
- Log(LogDebug, "HostDbObject", "host contacts: " + host->GetName());
+ Log(LogDebug, "HostDbObject")
+ << "host contacts: " << host->GetName();
BOOST_FOREACH(const User::Ptr& user, CompatUtility::GetCheckableNotificationUsers(host)) {
- Log(LogDebug, "HostDbObject", "host contacts: " + user->GetName());
+ Log(LogDebug, "HostDbObject")
+ << "host contacts: " << user->GetName();
Dictionary::Ptr fields_contact = make_shared<Dictionary>();
fields_contact->Set("host_id", DbValue::FromObjectInsertID(host));
OnQuery(query_contact);
}
- Log(LogDebug, "HostDbObject", "host contactgroups: " + host->GetName());
+ Log(LogDebug, "HostDbObject")
+ << "host contactgroups: " << host->GetName();
BOOST_FOREACH(const UserGroup::Ptr& usergroup, CompatUtility::GetCheckableNotificationUserGroups(host)) {
- Log(LogDebug, "HostDbObject", "host contactgroups: " + usergroup->GetName());
+ Log(LogDebug, "HostDbObject")
+ << "host contactgroups: " << usergroup->GetName();
Dictionary::Ptr fields_contact = make_shared<Dictionary>();
fields_contact->Set("host_id", DbValue::FromObjectInsertID(host));
Service::Ptr service = static_pointer_cast<Service>(GetObject());
/* service dependencies */
- Log(LogDebug, "ServiceDbObject", "service dependencies for '" + service->GetName() + "'");
+ Log(LogDebug, "ServiceDbObject")
+ << "service dependencies for '" << service->GetName() << "'";
BOOST_FOREACH(const Dependency::Ptr& dep, service->GetDependencies()) {
Checkable::Ptr parent = dep->GetParent();
if (!parent) {
- Log(LogDebug, "ServiceDbObject", "Missing parent for dependency '" + dep->GetName() + "'.");
+ Log(LogDebug, "ServiceDbObject")
+ << "Missing parent for dependency '" << dep->GetName() << "'.";
continue;
}
- Log(LogDebug, "ServiceDbObject", "service parents: " + parent->GetName());
+ Log(LogDebug, "ServiceDbObject")
+ << "service parents: " << parent->GetName();
int state_filter = dep->GetStateFilter();
}
/* service contacts, contactgroups */
- Log(LogDebug, "ServiceDbObject", "service contacts: " + service->GetName());
+ Log(LogDebug, "ServiceDbObject")
+ << "service contacts: " << service->GetName();
BOOST_FOREACH(const User::Ptr& user, CompatUtility::GetCheckableNotificationUsers(service)) {
- Log(LogDebug, "ServiceDbObject", "service contacts: " + user->GetName());
+ Log(LogDebug, "ServiceDbObject")
+ << "service contacts: " << user->GetName();
Dictionary::Ptr fields_contact = make_shared<Dictionary>();
fields_contact->Set("service_id", DbValue::FromObjectInsertID(service));
Log(LogDebug, "ServiceDbObject", "service contactgroups: " + service->GetName());
BOOST_FOREACH(const UserGroup::Ptr& usergroup, CompatUtility::GetCheckableNotificationUserGroups(service)) {
- Log(LogDebug, "ServiceDbObject", "service contactgroups: " + usergroup->GetName());
+ Log(LogDebug, "ServiceDbObject")
+ << "service contactgroups: " << usergroup->GetName();
Dictionary::Ptr fields_contact = make_shared<Dictionary>();
fields_contact->Set("service_id", DbValue::FromObjectInsertID(service));
User::Ptr user = static_pointer_cast<User>(GetObject());
/* contact addresses */
- Log(LogDebug, "UserDbObject", "contact addresses for '" + user->GetName() + "'");
+ Log(LogDebug, "UserDbObject")
+ << "contact addresses for '" << user->GetName() << "'";
Dictionary::Ptr vars = user->GetVars();
{
Log(LogCritical, "IdoMysqlConnection", "Exception during database operation: Verify that your database is operational!");
- Log(LogDebug, "IdoMysqlConnection", "Exception during database operation: " + DiagnosticInformation(exp));
+ Log(LogDebug, "IdoMysqlConnection")
+ << "Exception during database operation: " << DiagnosticInformation(exp);
boost::mutex::scoped_lock lock(m_ConnectionMutex);
/* connection */
if (!mysql_init(&m_Connection)) {
- std::ostringstream msgbuf;
- msgbuf << "mysql_init() failed: \"" << mysql_error(&m_Connection) << "\"";
- Log(LogCritical, "IdoMysqlConnection", msgbuf.str());
+ Log(LogCritical, "IdoMysqlConnection")
+ << "mysql_init() failed: \"" << mysql_error(&m_Connection) << "\"";
BOOST_THROW_EXCEPTION(std::bad_alloc());
}
if (!mysql_real_connect(&m_Connection, host, user, passwd, db, port, NULL, CLIENT_FOUND_ROWS)) {
- std::ostringstream msgbuf;
- msgbuf << "Connection to database '" << db << "' with user '" << user << "' on '" << host << ":" << port
+ Log(LogCritical, "IdoMysqlConnection")
+ << "Connection to database '" << db << "' with user '" << user << "' on '" << host << ":" << port
<< "' failed: \"" << mysql_error(&m_Connection) << "\"";
- Log(LogCritical, "IdoMysqlConnection", msgbuf.str());
BOOST_THROW_EXCEPTION(std::runtime_error(mysql_error(&m_Connection)));
}
String version = row->Get("version");
if (Utility::CompareVersion(SCHEMA_VERSION, version) < 0) {
- Log(LogCritical, "IdoMysqlConnection", "Schema version '" + version + "' does not match the required version '" +
- SCHEMA_VERSION + "'! Please check the upgrade documentation.");
+ Log(LogCritical, "IdoMysqlConnection")
+ << "Schema version '" << version << "' does not match the required version '"
+ << SCHEMA_VERSION << "'! Please check the upgrade documentation.";
Application::Exit(EXIT_FAILURE);
}
double status_update_age = Utility::GetTime() - status_update_time;
- Log(LogNotice, "IdoMysqlConnection", "Last update by '" +
- endpoint_name + "' was " + Convert::ToString(status_update_age) + "s ago.");
+ Log(LogNotice, "IdoMysqlConnection")
+ << "Last update by '" << endpoint_name << "' was " << status_update_age << "s ago.";
if (status_update_age < GetFailoverTimeout()) {
mysql_close(&m_Connection);
/* activate the IDO only, if we're authoritative in this zone */
if (IsPaused()) {
- Log(LogNotice, "IdoMysqlConnection", "Local endpoint '" +
- my_endpoint->GetName() + "' is not authoritative, bailing out.");
+ Log(LogNotice, "IdoMysqlConnection")
+ << "Local endpoint '" << my_endpoint->GetName() << "' is not authoritative, bailing out.";
mysql_close(&m_Connection);
m_Connected = false;
Log(LogNotice, "IdoMysqlConnection", "Enabling IDO connection.");
}
- std::ostringstream msgbuf;
- msgbuf << "MySQL IDO instance id: " << static_cast<long>(m_InstanceID) << " (schema version: '" + version + "')";
- Log(LogInformation, "IdoMysqlConnection", msgbuf.str());
+ Log(LogInformation, "IdoMysqlConnection")
+ << "MySQL IDO instance id: " << static_cast<long>(m_InstanceID) << " (schema version: '" + version + "')";
/* set session time zone to utc */
Query("SET SESSION TIME_ZONE='+00:00'");
/* deactivate all deleted configuration objects */
BOOST_FOREACH(const DbObject::Ptr& dbobj, active_dbobjs) {
if (dbobj->GetObject() == NULL) {
- Log(LogNotice, "IdoMysqlConnection", "Deactivate deleted object name1: '" + Convert::ToString(dbobj->GetName1() +
- "' name2: '" + Convert::ToString(dbobj->GetName2() + "'.")));
+ Log(LogNotice, "IdoMysqlConnection")
+ << "Deactivate deleted object name1: '" << dbobj->GetName1()
+ << "' name2: '" << dbobj->GetName2() + "'.";
DeactivateObject(dbobj);
}
}
{
Log(LogWarning, "IdoPgsqlConnection", "Exception during database operation: Verify that your database is operational!");
- Log(LogDebug, "IdoPgsqlConnection", "Exception during database operation: " + DiagnosticInformation(exp));
+ Log(LogDebug, "IdoPgsqlConnection")
+ << "Exception during database operation: " << DiagnosticInformation(exp);
boost::mutex::scoped_lock lock(m_ConnectionMutex);
PQfinish(m_Connection);
m_Connection = NULL;
- std::ostringstream msgbuf;
- msgbuf << "Connection to database '" << db << "' with user '" << user << "' on '" << host << ":" << port
+ Log(LogCritical, "IdoPgsqlConnection")
+ << "Connection to database '" << db << "' with user '" << user << "' on '" << host << ":" << port
<< "' failed: \"" << message << "\"";
- Log(LogCritical, "IdoPgsqlConnection", msgbuf.str());
BOOST_THROW_EXCEPTION(std::runtime_error(message));
}
String version = row->Get("version");
if (Utility::CompareVersion(SCHEMA_VERSION, version) < 0) {
- Log(LogCritical, "IdoPgsqlConnection", "Schema version '" + version + "' does not match the required version '" +
- SCHEMA_VERSION + "'! Please check the upgrade documentation.");
+ Log(LogCritical, "IdoPgsqlConnection")
+ << "Schema version '" << version << "' does not match the required version '"
+ << SCHEMA_VERSION << "'! Please check the upgrade documentation.";
Application::Exit(EXIT_FAILURE);
}
double status_update_age = Utility::GetTime() - status_update_time;
- Log(LogNotice, "IdoPgsqlConnection", "Last update by '" +
- endpoint_name + "' was " + Convert::ToString(status_update_age) + "s ago.");
+ Log(LogNotice, "IdoPgsqlConnection")
+ << "Last update by '" << endpoint_name << "' was " << status_update_age << "s ago.";
if (status_update_age < GetFailoverTimeout()) {
PQfinish(m_Connection);
/* activate the IDO only, if we're authoritative in this zone */
if (IsPaused()) {
- Log(LogNotice, "IdoPgsqlConnection", "Local endpoint '" +
- my_endpoint->GetName() + "' is not authoritative, bailing out.");
+ Log(LogNotice, "IdoPgsqlConnection")
+ << "Local endpoint '" << my_endpoint->GetName() << "' is not authoritative, bailing out.";
PQfinish(m_Connection);
m_Connection = NULL;
Log(LogNotice, "IdoPgsqlConnection", "Enabling IDO connection.");
}
- std::ostringstream msgbuf;
- msgbuf << "pgSQL IDO instance id: " << static_cast<long>(m_InstanceID) << " (schema version: '" + version + "')";
- Log(LogInformation, "IdoPgsqlConnection", msgbuf.str());
+ Log(LogInformation, "IdoPgsqlConnection")
+ << "pgSQL IDO instance id: " << static_cast<long>(m_InstanceID) << " (schema version: '" + version + "')";
/* record connection */
Query("INSERT INTO " + GetTablePrefix() + "conninfo " +
/* deactivate all deleted configuration objects */
BOOST_FOREACH(const DbObject::Ptr& dbobj, active_dbobjs) {
if (dbobj->GetObject() == NULL) {
- Log(LogNotice, "IdoPgsqlConnection", "Deactivate deleted object name1: '" + Convert::ToString(dbobj->GetName1() +
- "' name2: '" + Convert::ToString(dbobj->GetName2() + "'.")));
+ Log(LogNotice, "IdoPgsqlConnection")
+ << "Deactivate deleted object name1: '" << dbobj->GetName1()
+ << "' name2: '" << dbobj->GetName2() + "'.";
DeactivateObject(dbobj);
}
}
{
AssertOnWorkQueue();
- Log(LogDebug, "IdoPgsqlConnection", "Query: " + query);
+ Log(LogDebug, "IdoPgsqlConnection")
+ << "Query: " << query;
PGresult *result = PQexec(m_Connection, query.CStr());
if (!result) {
String message = PQerrorMessage(m_Connection);
- std::ostringstream msgbuf;
- msgbuf << "Error \"" << message << "\" when executing query \"" << query << "\"";
- Log(LogCritical, "IdoPgsqlConnection", msgbuf.str());
+ Log(LogCritical, "IdoPgsqlConnection")
+ << "Error \"" << message << "\" when executing query \"" << query << "\"";
BOOST_THROW_EXCEPTION(
database_error()
String message = PQresultErrorMessage(result);
PQclear(result);
- std::ostringstream msgbuf;
- msgbuf << "Error \"" << message << "\" when executing query \"" << query << "\"";
- Log(LogCritical, "IdoPgsqlConnection", msgbuf.str());
+ Log(LogCritical, "IdoPgsqlConnection")
+ << "Error \"" << message << "\" when executing query \"" << query << "\"";
BOOST_THROW_EXCEPTION(
database_error()
ASSERT(row);
- std::ostringstream msgbuf;
- msgbuf << "Sequence Value: " << row->Get("id");
- Log(LogDebug, "IdoPgsqlConnection", msgbuf.str());
+ Log(LogDebug, "IdoPgsqlConnection")
+ << "Sequence Value: " << row->Get("id");
return DbReference(Convert::ToLong(row->Get("id")));
}
if (type == DbQueryInsert && query.Table == "notifications" && query.NotificationObject) { // FIXME remove hardcoded table name
String idField = "notification_id";
- SetNotificationInsertID(query.NotificationObject, GetSequenceValue(GetTablePrefix() + query.Table, idField));
- Log(LogDebug, "IdoPgsqlConnection", "saving contactnotification notification_id=" + Convert::ToString(static_cast<long>(GetSequenceValue(GetTablePrefix() + query.Table, idField))));
+ DbReference seqval = GetSequenceValue(GetTablePrefix() + query.Table, idField);
+ SetNotificationInsertID(query.NotificationObject, seqval);
+ Log(LogDebug, "IdoPgsqlConnection")
+ << "saving contactnotification notification_id=" << Convert::ToString(seqval);
}
}
if (params)
text = params->Get("text");
- Log(LogInformation, "API", "Hello from the Icinga 2 API: " + text);
+ Log(LogInformation, "API")
+ << "Hello from the Icinga 2 API: " << text;
return 42;
}
olock.Unlock();
-// Log(LogDebug, "Checkable", "Flapping: Checkable " + GetName() +
-// " was: " + Convert::ToString(was_flapping) +
-// " is: " + Convert::ToString(is_flapping) +
-// " threshold: " + Convert::ToString(GetFlappingThreshold()) +
-// "% current: " + Convert::ToString(GetFlappingCurrent()) + "%.");
+// Log(LogDebug, "Checkable")
+// << "Flapping: Checkable " << GetName()
+// << " was: " << (was_flapping)
+// << " is: " << is_flapping)
+// << " threshold: " << GetFlappingThreshold()
+// << "% current: " + GetFlappingCurrent()) << "%.";
OnNewCheckResult(GetSelf(), cr, origin);
if (hardChange) {
OnStateChange(GetSelf(), cr, StateTypeHard, origin);
- Log(LogNotice, "Checkable", "State Change: Checkable " + GetName() + " hard state change from " + old_state_str + " to " + new_state_str + " detected.");
+ Log(LogNotice, "Checkable")
+ << "State Change: Checkable " << GetName() << " hard state change from " << old_state_str << " to " << new_state_str << " detected.";
} else if (stateChange) {
OnStateChange(GetSelf(), cr, StateTypeSoft, origin);
- Log(LogNotice, "Checkable", "State Change: Checkable " + GetName() + " soft state change from " + old_state_str + " to " + new_state_str + " detected.");
+ Log(LogNotice, "Checkable")
+ << "State Change: Checkable " << GetName() << " soft state change from " << old_state_str << " to " << new_state_str << " detected.";
}
if (GetStateType() == StateTypeSoft || hardChange || recovery)
if (!was_flapping && is_flapping) {
OnNotificationsRequested(GetSelf(), NotificationFlappingStart, cr, "", "");
- Log(LogNotice, "Checkable", "Flapping: Checkable " + GetName() + " started flapping (" + Convert::ToString(GetFlappingThreshold()) + "% < " + Convert::ToString(GetFlappingCurrent()) + "%).");
+ Log(LogNotice, "Checkable")
+ << "Flapping: Checkable " << GetName() << " started flapping (" << GetFlappingThreshold() << "% < " << GetFlappingCurrent() << "%).";
OnFlappingChanged(GetSelf(), FlappingStarted);
} else if (was_flapping && !is_flapping) {
OnNotificationsRequested(GetSelf(), NotificationFlappingEnd, cr, "", "");
- Log(LogNotice, "Checkable", "Flapping: Checkable " + GetName() + " stopped flapping (" + Convert::ToString(GetFlappingThreshold()) + "% >= " + Convert::ToString(GetFlappingCurrent()) + "%).");
+ Log(LogNotice, "Checkable")
+ << "Flapping: Checkable " << GetName() << " stopped flapping (" << GetFlappingThreshold() << "% >= " << GetFlappingCurrent() << "%).";
OnFlappingChanged(GetSelf(), FlappingStopped);
} else if (send_notification)
OnNotificationsRequested(GetSelf(), recovery ? NotificationRecovery : NotificationProblem, cr, "", "");
bool Checkable::IsReachable(DependencyType dt, Dependency::Ptr *failedDependency, int rstack) const
{
if (rstack > 20) {
- Log(LogWarning, "Checkable", "Too many nested dependencies for service '" + GetName() + "': Dependency failed.");
+ Log(LogWarning, "Checkable")
+ << "Too many nested dependencies for service '" << GetName() << "': Dependency failed.";
return false;
}
l_DowntimesCache[uid] = GetSelf();
}
- Log(LogNotice, "Checkable", "Added downtime with ID '" + Convert::ToString(downtime->GetLegacyId()) +
- "' between '" + Utility::FormatDateTime("%Y-%m-%d %H:%M:%S", startTime) + "' and '" + Utility::FormatDateTime("%Y-%m-%d %H:%M:%S", endTime) + "'.");
+ Log(LogNotice, "Checkable")
+ << "Added downtime with ID '" << downtime->GetLegacyId()
+ << "' between '" << Utility::FormatDateTime("%Y-%m-%d %H:%M:%S", startTime)
+ << "' and '" << Utility::FormatDateTime("%Y-%m-%d %H:%M:%S", endTime) << "'.";
OnDowntimeAdded(GetSelf(), downtime, origin);
String config_owner = downtime->GetConfigOwner();
if (!config_owner.IsEmpty()) {
- Log(LogWarning, "Checkable", "Cannot remove downtime with ID '" + Convert::ToString(legacy_id) + "'. It is owned by scheduled downtime object '" + config_owner + "'");
+ Log(LogWarning, "Checkable")
+ << "Cannot remove downtime with ID '" << legacy_id << "'. It is owned by scheduled downtime object '" << config_owner << "'";
return;
}
downtime->SetWasCancelled(cancelled);
- Log(LogNotice, "Checkable", "Removed downtime with ID '" + Convert::ToString(downtime->GetLegacyId()) + "' from service '" + owner->GetName() + "'.");
+ Log(LogNotice, "Checkable")
+ << "Removed downtime with ID '" << downtime->GetLegacyId() << "' from service '" << owner->GetName() << "'.";
OnDowntimeRemoved(owner, downtime, origin);
}
return;
if (downtime->IsActive() && downtime->IsTriggered()) {
- Log(LogDebug, "Checkable", "Not triggering downtime with ID '" + Convert::ToString(downtime->GetLegacyId()) + "': already triggered.");
+ Log(LogDebug, "Checkable")
+ << "Not triggering downtime with ID '" << downtime->GetLegacyId() << "': already triggered.";
return;
}
if (downtime->IsExpired()) {
- Log(LogDebug, "Checkable", "Not triggering downtime with ID '" + Convert::ToString(downtime->GetLegacyId()) + "': expired.");
+ Log(LogDebug, "Checkable")
+ << "Not triggering downtime with ID '" << downtime->GetLegacyId() << "': expired.";
return;
}
- Log(LogNotice, "Checkable", "Triggering downtime with ID '" + Convert::ToString(downtime->GetLegacyId()) + "'.");
+ Log(LogNotice, "Checkable")
+ << "Triggering downtime with ID '" << downtime->GetLegacyId() << "'.";
if (downtime->GetTriggerTime() == 0)
downtime->SetTriggerTime(Utility::GetTime());
if (!ec)
return;
- Log(LogNotice, "Checkable", "Executing event handler '" + ec->GetName() + "' for service '" + GetName() + "'");
+ Log(LogNotice, "Checkable")
+ << "Executing event handler '" << ec->GetName() << "' for service '" << GetName() << "'";
ec->Execute(GetSelf());
if (negative < 0)
negative = 0;
-// Log(LogDebug, "Checkable", "Flapping counter for '" + GetName() + "' is positive=" + Convert::ToString(positive) + ", negative=" + Convert::ToString(negative));
+// Log(LogDebug, "Checkable")
+// << "Flapping counter for '" << GetName() << "' is positive=" << positive << ", negative=" << negative;
SetFlappingLastChange(now);
SetFlappingPositive(positive);
if (!IcingaApplication::GetInstance()->GetEnableNotifications() || !GetEnableNotifications()) {
if (!force) {
- Log(LogInformation, "Checkable", "Notifications are disabled for service '" + GetName() + "'.");
+ Log(LogInformation, "Checkable")
+ << "Notifications are disabled for service '" << GetName() << "'.";
return;
}
SetForceNextNotification(false);
}
- Log(LogInformation, "Checkable", "Checking for configured notifications for object '" + GetName() + "'");
+ Log(LogInformation, "Checkable")
+ << "Checking for configured notifications for object '" << GetName() << "'";
std::set<Notification::Ptr> notifications = GetNotifications();
if (notifications.empty())
- Log(LogInformation, "Checkable", "Checkable '" + GetName() + "' does not have any notifications.");
+ Log(LogInformation, "Checkable")
+ << "Checkable '" << GetName() << "' does not have any notifications.";
- Log(LogDebug, "Checkable", "Checkable '" + GetName() + "' has " + Convert::ToString(notifications.size()) + " notification(s).");
+ Log(LogDebug, "Checkable")
+ << "Checkable '" << GetName() << "' has " << notifications.size() << " notification(s).";
BOOST_FOREACH(const Notification::Ptr& notification, notifications) {
try {
notification->BeginExecuteNotification(type, cr, force, author, text);
} catch (const std::exception& ex) {
- std::ostringstream msgbuf;
- msgbuf << "Exception occured during notification for service '"
- << GetName() << "': " << DiagnosticInformation(ex);
- String message = msgbuf.str();
-
- Log(LogWarning, "Checkable", message);
+ Log(LogWarning, "Checkable")
+ << "Exception occured during notification for service '"
+ << GetName() << "': " << DiagnosticInformation(ex);
}
}
}
if (!rule.EvaluateFilter(locals))
return false;
- std::ostringstream msgbuf2;
- msgbuf2 << "Applying dependency '" << rule.GetName() << "' to object '" << checkable->GetName() << "' for rule " << di;
- Log(LogDebug, "Dependency", msgbuf2.str());
+ Log(LogDebug, "Dependency")
+ << "Applying dependency '" << rule.GetName() << "' to object '" << checkable->GetName() << "' for rule " << di;
ConfigItemBuilder::Ptr builder = make_shared<ConfigItemBuilder>(di);
builder->SetType("Dependency");
}
if (apply_count == 0)
- Log(LogWarning, "Dependency", "Apply rule '" + rule.GetName() + "' for host does not match anywhere!");
+ Log(LogWarning, "Dependency")
+ << "Apply rule '" << rule.GetName() << "' for host does not match anywhere!";
} else if (rule.GetTargetType() == "Service") {
apply_count = 0;
}
if (apply_count == 0)
- Log(LogWarning, "Dependency", "Apply rule '" + rule.GetName() + "' for service does not match anywhere!");
+ Log(LogWarning, "Dependency")
+ << "Apply rule '" << rule.GetName() << "' for service does not match anywhere!";
} else {
- Log(LogWarning, "Dependency", "Wrong target type for apply rule '" + rule.GetName() + "'!");
+ Log(LogWarning, "Dependency")
+ << "Wrong target type for apply rule '" << rule.GetName() << "'!";
}
}
if (childHost) {
if (GetChildServiceName().IsEmpty()) {
- Log(LogDebug, "Dependency", "Dependency '" + GetName() + "' child host '" + GetChildHostName() + ".");
+ Log(LogDebug, "Dependency")
+ << "Dependency '" << GetName() << "' child host '" << GetChildHostName() << ".";
m_Child = childHost;
} else {
- Log(LogDebug, "Dependency", "Dependency '" + GetName() + "' child host '" + GetChildHostName() + "' service '" + GetChildServiceName() + "' .");
+ Log(LogDebug, "Dependency")
+ << "Dependency '" << GetName() << "' child host '" << GetChildHostName() << "' service '" << GetChildServiceName() << "' .";
m_Child = childHost->GetServiceByShortName(GetChildServiceName());
}
}
if (!m_Child)
- Log(LogWarning, "Dependency", "Dependency '" + GetName() + "' references an invalid child object and will be ignored.");
+ Log(LogWarning, "Dependency")
+ << "Dependency '" << GetName() << "' references an invalid child object and will be ignored.";
else
m_Child->AddDependency(GetSelf());
if (parentHost) {
if (GetParentServiceName().IsEmpty()) {
- Log(LogDebug, "Dependency", "Dependency '" + GetName() + "' parent host '" + GetParentHostName() + ".");
+ Log(LogDebug, "Dependency")
+ << "Dependency '" << GetName() << "' parent host '" << GetParentHostName() << ".";
m_Parent = parentHost;
} else {
- Log(LogDebug, "Dependency", "Dependency '" + GetName() + "' parent host '" + GetParentHostName() + "' service '" + GetParentServiceName() + "' .");
+ Log(LogDebug, "Dependency")
+ << "Dependency '" << GetName() << "' parent host '" << GetParentHostName() << "' service '" << GetParentServiceName() << "' .";
m_Parent = parentHost->GetServiceByShortName(GetParentServiceName());
}
}
if (!m_Parent)
- Log(LogWarning, "Dependency", "Dependency '" + GetName() + "' references an invalid parent object and will always fail.");
+ Log(LogWarning, "Dependency")
+ << "Dependency '" << GetName() << "' references an invalid parent object and will always fail.";
else
m_Parent->AddReverseDependency(GetSelf());
}
/* ignore if it's the same checkable object */
if (parent == GetChild()) {
- Log(LogNotice, "Dependency", "Dependency '" + GetName() + "' passed: Parent and child " + (service ? "service" : "host") + " are identical.");
+ Log(LogNotice, "Dependency")
+ << "Dependency '" << GetName() << "' passed: Parent and child " << (service ? "service" : "host") << " are identical.";
return true;
}
/* ignore pending */
if (!parent->GetLastCheckResult()) {
- Log(LogNotice, "Dependency", "Dependency '" + GetName() + "' passed: " + (service ? "Service" : "Host") + " '" + parent->GetName() + "' hasn't been checked yet.");
+ Log(LogNotice, "Dependency")
+ << "Dependency '" << GetName() << "' passed: " << (service ? "Service" : "Host") << " '" << parent->GetName() << "' hasn't been checked yet.";
return true;
}
/* ignore soft states */
if (parent->GetStateType() == StateTypeSoft) {
- Log(LogNotice, "Dependency", "Dependency '" + GetName() + "' passed: " + (service ? "Service" : "Host") + " '" + parent->GetName() + "' is in a soft state.");
+ Log(LogNotice, "Dependency")
+ << "Dependency '" << GetName() << "' passed: " << (service ? "Service" : "Host") << " '" << parent->GetName() << "' is in a soft state.";
return true;
}
/* check state */
if (state & GetStateFilter()) {
- Log(LogNotice, "Dependency", "Dependency '" + GetName() + "' passed: " + (service ? "Service" : "Host") + " '" + parent->GetName() + "' matches state filter.");
+ Log(LogNotice, "Dependency")
+ << "Dependency '" << GetName() << "' passed: " << (service ? "Service" : "Host") << " '" << parent->GetName() << "' matches state filter.";
return true;
}
/* ignore if not in time period */
TimePeriod::Ptr tp = GetPeriod();
if (tp && !tp->IsInside(Utility::GetTime())) {
- Log(LogNotice, "Dependency", "Dependency '" + GetName() + "' passed: Outside time period.");
+ Log(LogNotice, "Dependency")
+ << "Dependency '" << GetName() << "' passed: Outside time period.";
return true;
}
if (dt == DependencyCheckExecution && !GetDisableChecks()) {
- Log(LogNotice, "Dependency", "Dependency '" + GetName() + "' passed: Checks are not disabled.");
+ Log(LogNotice, "Dependency")
+ << "Dependency '" << GetName() << "' passed: Checks are not disabled.";
return true;
} else if (dt == DependencyNotification && !GetDisableNotifications()) {
- Log(LogNotice, "Dependency", "Dependency '" + GetName() + "' passed: Notifications are not disabled");
+ Log(LogNotice, "Dependency")
+ << "Dependency '" << GetName() << "' passed: Notifications are not disabled";
return true;
}
- Log(LogNotice, "Dependency", "Dependency '" + GetName() + "' failed. Parent " +
- (service ? "service" : "host") + " '" + parent->GetName() + "' is " +
- (service ? Service::StateToString(service->GetState()) : Host::StateToString(host->GetState())));
+ Log(LogNotice, "Dependency")
+ << "Dependency '" << GetName() << "' failed. Parent "
+ << (service ? "service" : "host") << " '" << parent->GetName() << "' is "
+ << (service ? Service::StateToString(service->GetState()) : Host::StateToString(host->GetState()));
+
return false;
}
if (!rule.EvaluateFilter(locals))
return false;
- std::ostringstream msgbuf2;
- msgbuf2 << "Assigning membership for group '" << rule.GetName() << "' to host '" << host->GetName() << "' for rule " << di;
- Log(LogDebug, "HostGroup", msgbuf2.str());
+ Log(LogDebug, "HostGroup")
+ << "Assigning membership for group '" << rule.GetName() << "' to host '" << host->GetName() << "' for rule " << di;
String group_name = rule.GetName();
HostGroup::Ptr group = HostGroup::GetByName(group_name);
if (!group) {
- Log(LogCritical, "HostGroup", "Invalid membership assignment. Group '" + group_name + "' does not exist.");
+ Log(LogCritical, "HostGroup")
+ << "Invalid membership assignment. Group '" << group_name << "' does not exist.";
return false;
}
bool HostGroup::ResolveGroupMembership(Host::Ptr const& host, bool add, int rstack) {
if (add && rstack > 20) {
- Log(LogWarning, "HostGroup", "Too many nested groups for group '" + GetName() + "': Host '" +
- host->GetName() + "' membership assignment failed.");
+ Log(LogWarning, "HostGroup")
+ << "Too many nested groups for group '" << GetName() << "': Host '"
+ << host->GetName() << "' membership assignment failed.";
return false;
}
ParseTimeRange(daydef, &begin, &end, &stride, reference);
- Log(LogDebug, "LegacyTimePeriod", "ParseTimeRange: '" + daydef + "' => " + Convert::ToString(static_cast<long>(mktime(&begin))) + " -> " + Convert::ToString(static_cast<long>(mktime(&end))) + ", stride: " + Convert::ToString(stride));
+ Log(LogDebug, "LegacyTimePeriod")
+ << "ParseTimeRange: '" << daydef << "' => " << mktime(&begin)
+ << " -> " << mktime(&end) << ", stride: " << stride;
return IsInTimeRange(&begin, &end, stride, reference);
}
tm reference = Utility::LocalTime(refts);
#ifdef _DEBUG
- Log(LogDebug, "LegacyTimePeriod", "Checking reference time " + Convert::ToString(static_cast<long>(refts)));
+ Log(LogDebug, "LegacyTimePeriod")
+ << "Checking reference time " << refts;
#endif /* _DEBUG */
ObjectLock olock(ranges);
BOOST_FOREACH(const Dictionary::Pair& kv, ranges) {
if (!IsInDayDefinition(kv.first, &reference)) {
#ifdef _DEBUG
- Log(LogDebug, "LegacyTimePeriod", "Not in day definition '" + kv.first + "'.");
+ Log(LogDebug, "LegacyTimePeriod")
+ << "Not in day definition '" << kv.first << "'.";
#endif /* _DEBUG */
continue;
}
#ifdef _DEBUG
- Log(LogDebug, "LegacyTimePeriod", "In day definition '" + kv.first + "'.");
+ Log(LogDebug, "LegacyTimePeriod")
+ << "In day definition '" << kv.first << "'.";
#endif /* _DEBUG */
ProcessTimeRanges(kv.second, &reference, segments);
}
}
- Log(LogDebug, "LegacyTimePeriod", "Legacy timeperiod update returned " + Convert::ToString(static_cast<long>(segments->GetLength())) + " segments.");
+ Log(LogDebug, "LegacyTimePeriod")
+ << "Legacy timeperiod update returned " << segments->GetLength() << " segments.";
return segments;
}
if (!found) {
if (!missingMacro)
- Log(LogWarning, "MacroProcessor", "Macro '" + name + "' is not defined.");
+ Log(LogWarning, "MacroProcessor")
+ << "Macro '" << name << "' is not defined.";
else
*missingMacro = name;
}
if (!rule.EvaluateFilter(locals))
return false;
- std::ostringstream msgbuf2;
- msgbuf2 << "Applying notification '" << rule.GetName() << "' to object '" << checkable->GetName() << "' for rule " << di;
- Log(LogDebug, "Notification", msgbuf2.str());
+ Log(LogDebug, "Notification")
+ << "Applying notification '" << rule.GetName() << "' to object '" << checkable->GetName() << "' for rule " << di;
ConfigItemBuilder::Ptr builder = make_shared<ConfigItemBuilder>(di);
builder->SetType("Notification");
}
if (apply_count == 0)
- Log(LogWarning, "Notification", "Apply rule '" + rule.GetName() + "' for host does not match anywhere!");
+ Log(LogWarning, "Notification")
+ << "Apply rule '" << rule.GetName() << "' for host does not match anywhere!";
} else if (rule.GetTargetType() == "Service") {
apply_count = 0;
}
if (apply_count == 0)
- Log(LogWarning, "Notification", "Apply rule '" + rule.GetName() + "' for service does not match anywhere!");
+ Log(LogWarning, "Notification")
+ << "Apply rule '" << rule.GetName() << "' for service does not match anywhere!";
} else {
- Log(LogWarning, "Notification", "Wrong target type for apply rule '" + rule.GetName() + "'!");
+ Log(LogWarning, "Notification")
+ << "Wrong target type for apply rule '" << rule.GetName() << "'!";
}
}
void Notification::EvaluateApplyRules(const std::vector<ApplyRule>& rules)
TimePeriod::Ptr tp = GetPeriod();
if (tp && !tp->IsInside(Utility::GetTime())) {
- Log(LogNotice, "Notification", "Not sending notifications for notification object '" + GetName() + "': not in timeperiod");
+ Log(LogNotice, "Notification")
+ << "Not sending notifications for notification object '" << GetName() << "': not in timeperiod";
return;
}
if (type == NotificationProblem) {
if (times && times->Contains("begin") && now < checkable->GetLastHardStateChange() + times->Get("begin")) {
- Log(LogNotice, "Notification", "Not sending notifications for notification object '" + GetName() + "': before escalation range");
+ Log(LogNotice, "Notification")
+ << "Not sending notifications for notification object '" << GetName() << "': before escalation range";
return;
}
if (times && times->Contains("end") && now > checkable->GetLastHardStateChange() + times->Get("end")) {
- Log(LogNotice, "Notification", "Not sending notifications for notification object '" + GetName() + "': after escalation range");
+ Log(LogNotice, "Notification")
+ << "Not sending notifications for notification object '" << GetName() << "': after escalation range";
return;
}
}
unsigned long ftype = 1 << type;
- Log(LogDebug, "Notification", "FType=" + Convert::ToString(ftype) + ", TypeFilter=" + Convert::ToString(GetTypeFilter()));
+ Log(LogDebug, "Notification")
+ << "FType=" << ftype << ", TypeFilter=" << GetTypeFilter();
if (!(ftype & GetTypeFilter())) {
- Log(LogNotice, "Notification", "Not sending notifications for notification object '" + GetName() + "': type filter does not match");
+ Log(LogNotice, "Notification")
+ << "Not sending notifications for notification object '" << GetName() << "': type filter does not match";
return;
}
fstate = HostStateToFilter(host->GetState());
if (!(fstate & GetStateFilter())) {
- Log(LogNotice, "Notification", "Not sending notifications for notification object '" + GetName() + "': state filter does not match");
+ Log(LogNotice, "Notification")
+ << "Not sending notifications for notification object '" << GetName() << "': state filter does not match";
return;
}
}
if (!user->GetEnableNotifications() || !CheckNotificationUserFilters(type, user, force))
continue;
- Log(LogInformation, "Notification", "Sending notification for user '" + user->GetName() + "'");
+ Log(LogInformation, "Notification")
+ << "Sending notification for user '" << user->GetName() << "'";
+
Utility::QueueAsyncCallback(boost::bind(&Notification::ExecuteNotificationHelper, this, type, user, cr, force, author, text));
/* collect all notified users */
TimePeriod::Ptr tp = user->GetPeriod();
if (tp && !tp->IsInside(Utility::GetTime())) {
- Log(LogNotice, "Notification", "Not sending notifications for notification object '" +
- GetName() + " and user '" + user->GetName() + "': user not in timeperiod");
+ Log(LogNotice, "Notification")
+ << "Not sending notifications for notification object '"
+ << GetName() << " and user '" << user->GetName() << "': user not in timeperiod";
return false;
}
unsigned long ftype = 1 << type;
if (!(ftype & user->GetTypeFilter())) {
- Log(LogNotice, "Notification", "Not sending notifications for notification object '" +
- GetName() + " and user '" + user->GetName() + "': type filter does not match");
+ Log(LogNotice, "Notification")
+ << "Not sending notifications for notification object '"
+ << GetName() << " and user '" << user->GetName() << "': type filter does not match";
return false;
}
fstate = HostStateToFilter(host->GetState());
if (!(fstate & user->GetStateFilter())) {
- Log(LogNotice, "Notification", "Not sending notifications for notification object '" +
- GetName() + " and user '" + user->GetName() + "': state filter does not match");
+ Log(LogNotice, "Notification")
+ << "Not sending notifications for notification object '"
+ << GetName() << " and user '" << user->GetName() << "': state filter does not match";
return false;
}
}
NotificationCommand::Ptr command = GetCommand();
if (!command) {
- Log(LogDebug, "Notification", "No notification_command found for notification '" + GetName() + "'. Skipping execution.");
+ Log(LogDebug, "Notification")
+ << "No notification_command found for notification '" << GetName() << "'. Skipping execution.";
return;
}
/* required by compatlogger */
Service::OnNotificationSentToUser(GetSelf(), GetCheckable(), user, type, cr, author, text, command->GetName());
- Log(LogInformation, "Notification", "Completed sending notification for object '" + GetCheckable()->GetName() + "'");
+ Log(LogInformation, "Notification")
+ << "Completed sending notification for object '" << GetCheckable()->GetName() << "'";
} catch (const std::exception& ex) {
- std::ostringstream msgbuf;
- msgbuf << "Exception occured during notification for object '"
- << GetCheckable()->GetName() << "': " << DiagnosticInformation(ex);
- Log(LogWarning, "Notification", msgbuf.str());
+ Log(LogWarning, "Notification")
+ << "Exception occured during notification for object '"
+ << GetCheckable()->GetName() << "': " << DiagnosticInformation(ex);
}
}
continue;
} catch (const std::exception& ex) {
/* tried to convert a string */
- Log(LogWarning, "PluginUtility", "Error evaluating set_if value '" + set_if_resolved + "': " + ex.what());
+ Log(LogWarning, "PluginUtility")
+ << "Error evaluating set_if value '" << set_if_resolved << "': " << ex.what();
continue;
}
}
if (!rule.EvaluateFilter(locals))
return false;
- std::ostringstream msgbuf2;
- msgbuf2 << "Applying scheduled downtime '" << rule.GetName() << "' to object '" << checkable->GetName() << "' for rule " << di;
- Log(LogDebug, "ScheduledDowntime", msgbuf2.str());
+ Log(LogDebug, "ScheduledDowntime")
+ << "Applying scheduled downtime '" << rule.GetName() << "' to object '" << checkable->GetName() << "' for rule " << di;
ConfigItemBuilder::Ptr builder = make_shared<ConfigItemBuilder>(di);
builder->SetType("ScheduledDowntime");
}
if (apply_count == 0)
- Log(LogWarning, "ScheduledDowntime", "Apply rule '" + rule.GetName() + "' for host does not match anywhere!");
+ Log(LogWarning, "ScheduledDowntime")
+ << "Apply rule '" << rule.GetName() << "' for host does not match anywhere!";
} else if (rule.GetTargetType() == "Service") {
apply_count = 0;
}
if (apply_count == 0)
- Log(LogWarning, "ScheduledDowntime", "Apply rule '" + rule.GetName() + "' for service does not match anywhere!");
+ Log(LogWarning, "ScheduledDowntime")
+ << "Apply rule '" << rule.GetName() << "' for service does not match anywhere!";
} else {
- Log(LogWarning, "ScheduledDowntime", "Wrong target type for apply rule '" + rule.GetName() + "'!");
+ Log(LogWarning, "ScheduledDowntime")
+ << "Wrong target type for apply rule '" << rule.GetName() << "'!";
}
}
}
time_t refts = Utility::GetTime();
tm reference = Utility::LocalTime(refts);
- Log(LogDebug, "ScheduledDowntime", "Finding next scheduled downtime segment for time " + Convert::ToString(static_cast<long>(refts)));
+ Log(LogDebug, "ScheduledDowntime")
+ << "Finding next scheduled downtime segment for time " << refts;
Dictionary::Ptr ranges = GetRanges();
if (!rule.EvaluateFilter(locals))
return false;
- std::ostringstream msgbuf2;
- msgbuf2 << "Applying service '" << rule.GetName() << "' to host '" << host->GetName() << "' for rule " << di;
- Log(LogDebug, "Service", msgbuf2.str());
+ Log(LogDebug, "Service")
+ << "Applying service '" << rule.GetName() << "' to host '" << host->GetName() << "' for rule " << di;
ConfigItemBuilder::Ptr builder = make_shared<ConfigItemBuilder>(di);
builder->SetType("Service");
}
if (apply_count == 0)
- Log(LogWarning, "Service", "Apply rule '" + rule.GetName() + "' for host does not match anywhere!");
+ Log(LogWarning, "Service")
+ << "Apply rule '" << rule.GetName() << "' for host does not match anywhere!";
}
void Service::EvaluateApplyRules(const std::vector<ApplyRule>& rules)
if (!rule.EvaluateFilter(locals))
return false;
- std::ostringstream msgbuf2;
- msgbuf2 << "Assigning membership for group '" << rule.GetName() << "' to service '" << service->GetName() << "' for rule " << di;
- Log(LogDebug, "ServiceGroup", msgbuf2.str());
+ Log(LogDebug, "ServiceGroup")
+ << "Assigning membership for group '" << rule.GetName() << "' to service '" << service->GetName() << "' for rule " << di;
String group_name = rule.GetName();
ServiceGroup::Ptr group = ServiceGroup::GetByName(group_name);
if (!group) {
- Log(LogCritical, "ServiceGroup", "Invalid membership assignment. Group '" + group_name + "' does not exist.");
+ Log(LogCritical, "ServiceGroup")
+ << "Invalid membership assignment. Group '" << group_name << "' does not exist.";
return false;
}
bool ServiceGroup::ResolveGroupMembership(Service::Ptr const& service, bool add, int rstack) {
if (add && rstack > 20) {
- Log(LogWarning, "ServiceGroup", "Too many nested groups for group '" + GetName() + "': Service '" +
- service->GetName() + "' membership assignment failed.");
+ Log(LogWarning, "ServiceGroup")
+ << "Too many nested groups for group '" << GetName() << "': Service '"
+ << service->GetName() << "' membership assignment failed.";
return false;
}
{
ASSERT(OwnsLock());
- Log(LogDebug, "TimePeriod", "Adding segment '" + Utility::FormatDateTime("%c", begin) + "' <-> '" + Utility::FormatDateTime("%c", end) + "' to TimePeriod '" + GetName() + "'");
+ Log(LogDebug, "TimePeriod")
+ << "Adding segment '" << Utility::FormatDateTime("%c", begin) << "' <-> '"
+ << Utility::FormatDateTime("%c", end) << "' to TimePeriod '" << GetName() << "'";
if (GetValidBegin().IsEmpty() || begin < GetValidBegin())
SetValidBegin(begin);
{
ASSERT(OwnsLock());
- Log(LogDebug, "TimePeriod", "Removing segment '" + Utility::FormatDateTime("%c", begin) + "' <-> '" + Utility::FormatDateTime("%c", end) + "' from TimePeriod '" + GetName() + "'");
+ Log(LogDebug, "TimePeriod")
+ << "Removing segment '" << Utility::FormatDateTime("%c", begin) << "' <-> '"
+ << Utility::FormatDateTime("%c", end) << "' from TimePeriod '" << GetName() << "'";
if (GetValidBegin().IsEmpty() || begin < GetValidBegin())
SetValidBegin(begin);
{
ASSERT(OwnsLock());
- Log(LogDebug, "TimePeriod", "Purging segments older than '" + Utility::FormatDateTime("%c", end) + "' from TimePeriod '" + GetName() + "'");
+ Log(LogDebug, "TimePeriod")
+ << "Purging segments older than '" << Utility::FormatDateTime("%c", end)
+ << "' from TimePeriod '" << GetName() << "'";
if (GetValidBegin().IsEmpty() || end < GetValidBegin())
return;
{
Array::Ptr segments = GetSegments();
- Log(LogDebug, "TimePeriod", "Dumping TimePeriod '" + GetName() + "'");
- Log(LogDebug, "TimePeriod", "Valid from '" + Utility::FormatDateTime("%c", GetValidBegin()) + "' until '" + Utility::FormatDateTime("%c", GetValidEnd()));
+ Log(LogDebug, "TimePeriod")
+ << "Dumping TimePeriod '" << GetName() << "'";
+
+ Log(LogDebug, "TimePeriod")
+ << "Valid from '" << Utility::FormatDateTime("%c", GetValidBegin())
+ << "' until '" << Utility::FormatDateTime("%c", GetValidEnd());
if (segments) {
ObjectLock dlock(segments);
BOOST_FOREACH(const Dictionary::Ptr& segment, segments) {
- Log(LogDebug, "TimePeriod", "Segment: " +
- Utility::FormatDateTime("%c", segment->Get("begin")) + " <-> " +
- Utility::FormatDateTime("%c", segment->Get("end")));
+ Log(LogDebug, "TimePeriod")
+ << "Segment: " << Utility::FormatDateTime("%c", segment->Get("begin")) << " <-> "
+ << Utility::FormatDateTime("%c", segment->Get("end"));
}
}
if (!rule.EvaluateFilter(locals))
return false;
- std::ostringstream msgbuf2;
- msgbuf2 << "Assigning membership for group '" << rule.GetName() << "' to user '" << user->GetName() << "' for rule " << di;
- Log(LogDebug, "UserGroup", msgbuf2.str());
+ Log(LogDebug, "UserGroup")
+ << "Assigning membership for group '" << rule.GetName() << "' to user '" << user->GetName() << "' for rule " << di;
String group_name = rule.GetName();
UserGroup::Ptr group = UserGroup::GetByName(group_name);
if (!group) {
- Log(LogCritical, "UserGroup", "Invalid membership assignment. Group '" + group_name + "' does not exist.");
+ Log(LogCritical, "UserGroup")
+ << "Invalid membership assignment. Group '" << group_name << "' does not exist.";
return false;
}
bool UserGroup::ResolveGroupMembership(User::Ptr const& user, bool add, int rstack) {
if (add && rstack > 20) {
- Log(LogWarning, "UserGroup", "Too many nested groups for group '" + GetName() + "': User '" +
- user->GetName() + "' membership assignment failed.");
+ Log(LogWarning, "UserGroup")
+ << "Too many nested groups for group '" << GetName() << "': User '"
+ << user->GetName() << "' membership assignment failed.";
return false;
}
boost::smatch what;
ret = boost::regex_search(operand.GetData(), what, expr);
} catch (boost::exception&) {
- Log(LogWarning, "AttributeFilter", "Regex '" + m_Operand + " " + m_Operator + " " + Convert::ToString(value) + "' error.");
+ Log(LogWarning, "AttributeFilter")
+ << "Regex '" << m_Operand << " " << m_Operator << " " << value << "' error.";
ret = false;
}
- //Log(LogDebug, "LivestatusListener/AttributeFilter", "Attribute filter '" + m_Operand + " " + m_Operator + " " +
- // static_cast<String>(value) + "' " + (ret ? "matches" : "doesn't match") + "." );
+ //Log(LogDebug, "LivestatusListener/AttributeFilter")
+ // << "Attribute filter '" << m_Operand + " " << m_Operator << " "
+ // << value << "' " << (ret ? "matches" : "doesn't match") << ".";
return ret;
} else if (m_Operator == "=~") {
boost::smatch what;
ret = boost::regex_search(operand.GetData(), what, expr);
} catch (boost::exception&) {
- Log(LogWarning, "AttributeFilter", "Regex '" + m_Operand + " " + m_Operator + " " + Convert::ToString(value) + "' error.");
+ Log(LogWarning, "AttributeFilter")
+ << "Regex '" << m_Operand << " " << m_Operator << " " << value << "' error.";
ret = false;
}
- //Log(LogDebug, "LivestatusListener/AttributeFilter", "Attribute filter '" + m_Operand + " " + m_Operator + " " +
- // static_cast<String>(value) + "' " + (ret ? "matches" : "doesn't match") + "." );
+ //Log(LogDebug, "LivestatusListener/AttributeFilter")
+ // << "Attribute filter '" << m_Operand << " " << m_Operator << " "
+ // << value << "' " << (ret ? "matches" : "doesn't match") << ".";
return ret;
} else if (m_Operator == "<") {
try {
socket->Bind(GetBindHost(), GetBindPort(), AF_UNSPEC);
} catch (std::exception&) {
- Log(LogCritical, "LivestatusListener", "Cannot bind tcp socket on host '" + GetBindHost() + "' port '" + GetBindPort() + "'.");
+ Log(LogCritical, "LivestatusListener")
+ << "Cannot bind TCP socket on host '" << GetBindHost() << "' port '" << GetBindPort() << "'.";
return;
}
boost::thread thread(boost::bind(&LivestatusListener::ServerThreadProc, this, socket));
thread.detach();
- Log(LogInformation, "LivestatusListener", "Created tcp socket listening on host '" + GetBindHost() + "' port '" + GetBindPort() + "'.");
+ Log(LogInformation, "LivestatusListener")
+ << "Created TCP socket listening on host '" << GetBindHost() << "' port '" << GetBindPort() << "'.";
}
else if (GetSocketType() == "unix") {
#ifndef _WIN32
try {
socket->Bind(GetSocketPath());
} catch (std::exception&) {
- Log(LogCritical, "LivestatusListener", "Cannot bind unix socket in '" + GetSocketPath() + "'.");
+ Log(LogCritical, "LivestatusListener")
+ << "Cannot bind UNIX socket to '" << GetSocketPath() << "'.";
return;
}
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP;
if (chmod(GetSocketPath().CStr(), mode) < 0) {
- std::ostringstream msgbuf;
- msgbuf << "chmod() on unix socket '" << GetSocketPath() << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
- Log(LogCritical, "LivestatusListener", msgbuf.str());
+ Log(LogCritical, "LivestatusListener")
+ << "chmod() on unix socket '" << GetSocketPath() << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
return;
}
boost::thread thread(boost::bind(&LivestatusListener::ServerThreadProc, this, socket));
thread.detach();
- Log(LogInformation, "LivestatusListener", "Created unix socket in '" + GetSocketPath() + "'.");
+ Log(LogInformation, "LivestatusListener")
+ << "Created UNIX socket in '" << GetSocketPath() << "'.";
#else
- /* no unix sockets on windows */
+ /* no UNIX sockets on windows */
Log(LogCritical, "LivestatusListener", "Unix sockets are not supported on Windows.");
return;
#endif
if (header == "Or" || header == "StatsOr") {
filter = make_shared<OrFilter>();
- Log(LogDebug, "LivestatusQuery", "Add OR filter for " + params + " column(s). " + Convert::ToString(deq.size()) + " filters available.");
+ Log(LogDebug, "LivestatusQuery")
+ << "Add OR filter for " << params << " column(s). " << deq.size() << " filters available.";
} else {
filter = make_shared<AndFilter>();
- Log(LogDebug, "LivestatusQuery", "Add AND filter for " + params + " column(s). " + Convert::ToString(deq.size()) + " filters available.");
+ Log(LogDebug, "LivestatusQuery")
+ << "Add AND filter for " << params << " column(s). " << deq.size() << " filters available.";
}
if (num > deq.size()) {
while (num > 0 && num--) {
filter->AddSubFilter(deq.back());
- Log(LogDebug, "LivestatusQuery", "Add " + Convert::ToString(num) + " filter.");
+ Log(LogDebug, "LivestatusQuery")
+ << "Add " << num << " filter.";
deq.pop_back();
if (&deq == &stats)
aggregators.pop_back();
}
}
- Log(LogDebug, "LivestatusQuery", "Parsed filter with attr: '" + attr + "' op: '" + op + "' val: '" + val + "'.");
+ Log(LogDebug, "LivestatusQuery")
+ << "Parsed filter with attr: '" << attr << "' op: '" << op << "' val: '" << val << "'.";
return filter;
}
void LivestatusQuery::ExecuteGetHelper(const Stream::Ptr& stream)
{
- Log(LogInformation, "LivestatusQuery", "Table: " + m_Table);
+ Log(LogInformation, "LivestatusQuery")
+ << "Table: " << m_Table;
Table::Ptr table = Table::GetByName(m_Table, m_CompatLogPath, m_LogTimeFrom, m_LogTimeUntil);
l_ExternalCommands++;
}
- Log(LogInformation, "LivestatusQuery", "Executing command: " + m_Command);
+ Log(LogInformation, "LivestatusQuery")
+ << "Executing command: " << m_Command;
ExternalCommandProcessor::Execute(m_Command);
SendResponse(stream, LivestatusErrorOK, "");
}
void LivestatusQuery::ExecuteErrorHelper(const Stream::Ptr& stream)
{
- Log(LogDebug, "LivestatusQuery", "ERROR: Code: '" + Convert::ToString(m_ErrorCode) + "' Message: '" + m_ErrorMessage + "'.");
+ Log(LogDebug, "LivestatusQuery")
+ << "ERROR: Code: '" << m_ErrorCode << "' Message: '" << m_ErrorMessage << "'.";
SendResponse(stream, m_ErrorCode, m_ErrorMessage);
}
try {
stream->Write(data.CStr(), data.GetLength());
} catch (const std::exception&) {
- Log(LogCritical, "LivestatusQuery", "Cannot write to tcp socket.");
+ Log(LogCritical, "LivestatusQuery", "Cannot write to TCP socket.");
}
}
}
try {
stream->Write(header.CStr(), header.GetLength());
} catch (const std::exception&) {
- Log(LogCritical, "LivestatusQuery", "Cannot write to tcp socket.");
+ Log(LogCritical, "LivestatusQuery", "Cannot write to TCP socket.");
}
}
bool LivestatusQuery::Execute(const Stream::Ptr& stream)
{
try {
- Log(LogInformation, "LivestatusQuery", "Executing livestatus query: " + m_Verb);
+ Log(LogInformation, "LivestatusQuery")
+ << "Executing livestatus query: " << m_Verb;
if (m_Verb == "GET")
ExecuteGetHelper(stream);
state_hist_service_states->Add(state_hist_bag);
- Log(LogDebug, "StateHistTable", "statehist: Adding new object '" + checkable->GetName() + "' to services cache.");
+ Log(LogDebug, "StateHistTable")
+ << "statehist: Adding new object '" << checkable->GetName() << "' to services cache.";
} else {
state_hist_service_states = m_CheckablesCache[checkable];
state_hist_bag = state_hist_service_states->Get(state_hist_service_states->GetLength()-1); /* fetch latest state from history */
state_hist_service_states->Add(state_hist_bag_new);
- Log(LogDebug, "StateHistTable", "statehist: State change detected for object '" +
- checkable->GetName() + "' in '" + log_line + "'.");
+ Log(LogDebug, "StateHistTable")
+ << "statehist: State change detected for object '" << checkable->GetName() << "' in '" << log_line << "'.";
}
break;
case LogEntryTypeHostFlapping:
void StateHistTable::FetchRows(const AddRowFunction& addRowFn)
{
- Log(LogDebug, "StateHistTable", "Pre-selecting log file from " + Convert::ToString(m_TimeFrom) + " until " + Convert::ToString(m_TimeUntil));
+ Log(LogDebug, "StateHistTable")
+ << "Pre-selecting log file from " << m_TimeFrom << " until " << m_TimeUntil;
/* create log file index */
LivestatusLogUtility::CreateLogIndex(m_CompatLogPath, m_LogFileIndex);
{
if (pr.ExitStatus > 3) {
Process::Arguments parguments = Process::PrepareCommand(commandLine);
- Log(LogWarning, "PluginCheckTask", "Check command for object '" + checkable->GetName() + "' (PID: " + Convert::ToString(pr.PID) +
- ", arguments: " + Process::PrettyPrintArguments(parguments) + ") terminated with exit code " +
- Convert::ToString(pr.ExitStatus) + ", output: " + pr.Output);
+ Log(LogWarning, "PluginCheckTask")
+ << "Check command for object '" << checkable->GetName() << "' (PID: " << pr.PID
+ << ", arguments: " << Process::PrettyPrintArguments(parguments) << ") terminated with exit code "
+ << pr.ExitStatus << ", output: " << pr.Output;
}
String output = pr.Output;
{
if (pr.ExitStatus != 0) {
Process::Arguments parguments = Process::PrepareCommand(commandLine);
- Log(LogNotice, "PluginEventTask", "Event command for object '" + checkable->GetName() + "' (PID: " + Convert::ToString(pr.PID) +
- ", arguments: " + Process::PrettyPrintArguments(parguments) + ") terminated with exit code " +
- Convert::ToString(pr.ExitStatus) + ", output: " + pr.Output);
+ Log(LogNotice, "PluginEventTask")
+ << "Event command for object '" << checkable->GetName() << "' (PID: " << pr.PID
+ << ", arguments: " << Process::PrettyPrintArguments(parguments) << ") terminated with exit code "
+ << pr.ExitStatus << ", output: " << pr.Output;
}
}
{
if (pr.ExitStatus != 0) {
Process::Arguments parguments = Process::PrepareCommand(commandLine);
- Log(LogWarning, "PluginNotificationTask", "Notification command for object '" + checkable->GetName() + "' (PID: " + Convert::ToString(pr.PID) +
- ", arguments: " + Process::PrettyPrintArguments(parguments) + ") terminated with exit code " +
- Convert::ToString(pr.ExitStatus) + ", output: " + pr.Output);
+ Log(LogWarning, "PluginNotificationTask")
+ << "Notification command for object '" << checkable->GetName() << "' (PID: " << pr.PID
+ << ", arguments: " << Process::PrettyPrintArguments(parguments) << ") terminated with exit code "
+ << pr.ExitStatus << ", output: " << pr.Output;
}
}
}
try {
- Log(LogInformation, "NotificationComponent", "Sending reminder notification for object '" + checkable->GetName() + "'");
+ Log(LogInformation, "NotificationComponent")
+ << "Sending reminder notification for object '" << checkable->GetName() << "'";
notification->BeginExecuteNotification(NotificationProblem, checkable->GetLastCheckResult(), false);
} catch (const std::exception& ex) {
- std::ostringstream msgbuf;
- msgbuf << "Exception occured during notification for object '"
- << GetName() << "': " << DiagnosticInformation(ex);
- String message = msgbuf.str();
-
- Log(LogWarning, "NotificationComponent", message);
+ Log(LogWarning, "NotificationComponent")
+ << "Exception occured during notification for object '"
+ << GetName() << "': " << DiagnosticInformation(ex);
}
}
}
std::ostringstream msgbuf;
msgbuf << prefix << "." << name << " " << Convert::ToString(value) << " " << static_cast<long>(Utility::GetTime());
- Log(LogDebug, "GraphiteWriter", "Add to metric list:'" + msgbuf.str() + "'.");
+ Log(LogDebug, "GraphiteWriter")
+ << "Add to metric list:'" << msgbuf.str() << "'.";
// do not send \n to debug log
msgbuf << "\n";
try {
m_Stream->Write(metric.CStr(), metric.GetLength());
} catch (const std::exception& ex) {
- Log(LogCritical, "GraphiteWriter", "Cannot write to TCP socket on host '" + GetHost() + "' port '" + GetPort() + "'.");
+ Log(LogCritical, "GraphiteWriter")
+ << "Cannot write to TCP socket on host '" << GetHost() << "' port '" << GetPort() << "'.";
m_Stream.reset();
}
output.open(temp_path.CStr());
if (!output.good())
- Log(LogWarning, "PerfdataWriter", "Could not open perfdata file '" + temp_path + "' for writing. Perfdata will be lost.");
+ Log(LogWarning, "PerfdataWriter")
+ << "Could not open perfdata file '" << temp_path << "' for writing. Perfdata will be lost.";
}
void PerfdataWriter::RotationTimerHandler(void)
void ApiClient::SendMessage(const Dictionary::Ptr& message)
{
if (m_WriteQueue.GetLength() > 20000) {
- Log(LogWarning, "remote", "Closing connection for API identity '" + m_Identity + "': Too many queued messages.");
+ Log(LogWarning, "remote")
+ << "Closing connection for API identity '" << m_Identity << "': Too many queued messages.";
Disconnect();
return;
}
if (message->Get("method") != "log::SetLogPosition")
m_Seen = Utility::GetTime();
} catch (const std::exception& ex) {
- std::ostringstream info, debug;
+ std::ostringstream info;
info << "Error while sending JSON-RPC message for identity '" << m_Identity << "'";
- debug << info.str() << std::endl << DiagnosticInformation(ex);
- Log(LogWarning, "ApiClient", info.str());
- Log(LogDebug, "ApiClient", debug.str());
+ Log(LogWarning, "ApiClient")
+ << info.str();
+ Log(LogDebug, "ApiClient")
+ << info.str() << "\n" << DiagnosticInformation(ex);
Disconnect();
}
void ApiClient::DisconnectSync(void)
{
- Log(LogWarning, "ApiClient", "API client disconnected for identity '" + m_Identity + "'");
+ Log(LogWarning, "ApiClient")
+ << "API client disconnected for identity '" << m_Identity << "'";
if (m_Endpoint)
m_Endpoint->RemoveClient(GetSelf());
String method = message->Get("method");
- Log(LogNotice, "ApiClient", "Received '" + method + "' message from '" + m_Identity + "'");
+ Log(LogNotice, "ApiClient")
+ << "Received '" << method << "' message from '" << m_Identity << "'";
Dictionary::Ptr resultMessage = make_shared<Dictionary>();
bool verify_ok = tlsStream->IsVerifyOK();
- std::ostringstream msgbuf;
- msgbuf << "New client connection for identity '" << identity << "'";
-
- if (!verify_ok)
- msgbuf << " (unauthenticated)";
-
- Log(LogInformation, "ApiListener", msgbuf.str());
+ Log(LogInformation, "ApiListener")
+ << "New client connection for identity '" << identity << "'" << (verify_ok ? "" : " (unauthenticated");
Endpoint::Ptr endpoint;