Made logging more modular.

This commit is contained in:
Gunnar Beutner 2012-07-10 12:21:19 +02:00
parent b9fd84a87f
commit 7d859e2e18
22 changed files with 354 additions and 197 deletions

View File

@ -11,6 +11,8 @@ libbase_la_SOURCES = \
component.h \ component.h \
configobject.cpp \ configobject.cpp \
configobject.h \ configobject.h \
consolelogger.cpp \
consolelogger.h \
dictionary.cpp \ dictionary.cpp \
dictionary.h \ dictionary.h \
event.cpp \ event.cpp \
@ -20,6 +22,8 @@ libbase_la_SOURCES = \
fifo.cpp \ fifo.cpp \
fifo.h \ fifo.h \
i2-base.h \ i2-base.h \
logger.cpp \
logger.h \
object.cpp \ object.cpp \
object.h \ object.h \
objectset.cpp \ objectset.cpp \

View File

@ -23,14 +23,12 @@
# include <ltdl.h> # include <ltdl.h>
#endif #endif
using std::cout;
using std::endl;
using namespace icinga; using namespace icinga;
Application::Ptr I2_EXPORT Application::m_Instance; Application::Ptr Application::m_Instance;
bool I2_EXPORT Application::m_ShuttingDown = false; bool Application::m_ShuttingDown = false;
bool I2_EXPORT Application::m_Debugging = false; bool Application::m_Debugging = false;
boost::thread::id Application::m_MainThreadID;
/** /**
* Constructor for the Application class. * Constructor for the Application class.
@ -136,7 +134,7 @@ Component::Ptr Application::LoadComponent(const string& path,
Component::Ptr component; Component::Ptr component;
Component *(*pCreateComponent)(); Component *(*pCreateComponent)();
Log(LogInformation, "base", "Loading component '" + path + "'"); Logger::Write(LogInformation, "base", "Loading component '" + path + "'");
#ifdef _WIN32 #ifdef _WIN32
HMODULE hModule = LoadLibrary(path.c_str()); HMODULE hModule = LoadLibrary(path.c_str());
@ -190,7 +188,7 @@ void Application::UnregisterComponent(const Component::Ptr& component)
{ {
string name = component->GetName(); string name = component->GetName();
Log(LogInformation, "base", "Unloading component '" + name + "'"); Logger::Write(LogInformation, "base", "Unloading component '" + name + "'");
map<string, Component::Ptr>::iterator i = m_Components.find(name); map<string, Component::Ptr>::iterator i = m_Components.find(name);
if (i != m_Components.end()) if (i != m_Components.end())
m_Components.erase(i); m_Components.erase(i);
@ -214,50 +212,6 @@ Component::Ptr Application::GetComponent(const string& name) const
return i->second; return i->second;
} }
/**
* Writes a message to the application's log.
*
* @param severity The message severity.
* @param facility The log facility.
* @param message The message.
*/
void Application::Log(LogSeverity severity, const string& facility, const string& message)
{
char timestamp[100];
// TODO: make this configurable
if (/*!IsDebugging() && */severity < LogInformation)
return;
string severityStr;
switch (severity) {
case LogDebug:
severityStr = "debug";
break;
case LogInformation:
severityStr = "info";
break;
case LogWarning:
severityStr = "warning";
break;
case LogCritical:
severityStr = "critical";
break;
default:
assert(!"Invalid severity specified.");
}
time_t now;
time(&now);
tm tmnow = *localtime(&now);
strftime(timestamp, sizeof(timestamp), "%Y/%m/%d %H:%M:%S", &tmnow);
cout << "[" << timestamp << "] "
<< severityStr << "/" << facility << ": "
<< message << endl;
}
/** /**
* Retrieves the directory the application's binary is contained in. * Retrieves the directory the application's binary is contained in.
* *
@ -351,6 +305,11 @@ bool Application::IsDebugging(void)
return m_Debugging; return m_Debugging;
} }
bool Application::IsMainThread(void)
{
return (boost::this_thread::get_id() == m_MainThreadID);
}
#ifndef _WIN32 #ifndef _WIN32
/** /**
* Signal handler for SIGINT. Prepares the application for cleanly * Signal handler for SIGINT. Prepares the application for cleanly
@ -405,6 +364,9 @@ int Application::Run(int argc, char **argv)
int result; int result;
assert(!Application::m_Instance); assert(!Application::m_Instance);
m_MainThreadID = boost::this_thread::get_id();
Application::m_Instance = GetSelf(); Application::m_Instance = GetSelf();
#ifndef _WIN32 #ifndef _WIN32
@ -433,9 +395,9 @@ int Application::Run(int argc, char **argv)
} catch (const std::exception& ex) { } catch (const std::exception& ex) {
Application::m_Instance.reset(); Application::m_Instance.reset();
Application::Log(LogCritical, "base", "---"); Logger::Write(LogCritical, "base", "---");
Application::Log(LogCritical, "base", "Exception: " + Utility::GetTypeName(ex)); Logger::Write(LogCritical, "base", "Exception: " + Utility::GetTypeName(ex));
Application::Log(LogCritical, "base", "Message: " + string(ex.what())); Logger::Write(LogCritical, "base", "Message: " + string(ex.what()));
return EXIT_FAILURE; return EXIT_FAILURE;
} }

View File

@ -22,19 +22,6 @@
namespace icinga { namespace icinga {
/**
* Log severity.
*
* @ingroup base
*/
enum LogSeverity
{
LogDebug,
LogInformation,
LogWarning,
LogCritical
};
class Component; class Component;
/** /**
@ -58,8 +45,6 @@ public:
static void Shutdown(void); static void Shutdown(void);
static void Log(LogSeverity severity, const string& facility, const string& message);
shared_ptr<Component> LoadComponent(const string& path, shared_ptr<Component> LoadComponent(const string& path,
const ConfigObject::Ptr& componentConfig); const ConfigObject::Ptr& componentConfig);
void RegisterComponent(const shared_ptr<Component>& component); void RegisterComponent(const shared_ptr<Component>& component);
@ -69,6 +54,8 @@ public:
static bool IsDebugging(void); static bool IsDebugging(void);
static bool IsMainThread(void);
protected: protected:
void RunEventLoop(void); void RunEventLoop(void);
string GetExeDirectory(void) const; string GetExeDirectory(void) const;
@ -82,6 +69,7 @@ private:
were loaded by the application. */ were loaded by the application. */
vector<string> m_Arguments; /**< Command-line arguments */ vector<string> m_Arguments; /**< Command-line arguments */
static bool m_Debugging; /**< Whether debugging is enabled. */ static bool m_Debugging; /**< Whether debugging is enabled. */
static boost::thread::id m_MainThreadID; /**< ID of the main thread. */
#ifndef _WIN32 #ifndef _WIN32
static void SigIntHandler(int signum); static void SigIntHandler(int signum);

38
base/consolelogger.cpp Normal file
View File

@ -0,0 +1,38 @@
#include "i2-base.h"
using namespace icinga;
ConsoleLogger::ConsoleLogger(LogSeverity minSeverity)
: Logger(minSeverity)
{ }
void ConsoleLogger::ProcessLogEntry(const LogEntry& entry)
{
char timestamp[100];
string severityStr;
switch (entry.Severity) {
case LogDebug:
severityStr = "debug";
break;
case LogInformation:
severityStr = "info";
break;
case LogWarning:
severityStr = "warning";
break;
case LogCritical:
severityStr = "critical";
break;
default:
assert(!"Invalid severity specified.");
}
tm tmnow = *localtime(&entry.Timestamp);
strftime(timestamp, sizeof(timestamp), "%Y/%m/%d %H:%M:%S", &tmnow);
std::cout << "[" << timestamp << "] "
<< severityStr << "/" << entry.Facility << ": "
<< entry.Message << std::endl;
}

18
base/consolelogger.h Normal file
View File

@ -0,0 +1,18 @@
#ifndef CONSOLELOGGER_H
#define CONSOLELOGGER_H
namespace icinga
{
class ConsoleLogger : public Logger
{
public:
ConsoleLogger(LogSeverity minSeverity);
protected:
virtual void ProcessLogEntry(const LogEntry& entry);
};
}
#endif /* CONSOLELOGGER_H */

View File

@ -43,7 +43,14 @@ bool Event::Wait(vector<Event::Ptr> *events, const system_time& wait_until)
void Event::Post(const Event::Ptr& ev) void Event::Post(const Event::Ptr& ev)
{ {
mutex::scoped_lock lock(m_Mutex); if (Application::IsMainThread()) {
m_Events.push_back(ev); ev->OnEventDelivered();
m_EventAvailable.notify_all(); return;
}
{
mutex::scoped_lock lock(m_Mutex);
m_Events.push_back(ev);
m_EventAvailable.notify_all();
}
} }

View File

@ -168,5 +168,7 @@ using boost::system_time;
#include "application.h" #include "application.h"
#include "component.h" #include "component.h"
#include "threadpool.h" #include "threadpool.h"
#include "logger.h"
#include "consolelogger.h"
#endif /* I2BASE_H */ #endif /* I2BASE_H */

70
base/logger.cpp Normal file
View File

@ -0,0 +1,70 @@
/******************************************************************************
* Icinga 2 *
* Copyright (C) 2012 Icinga Development Team (http://www.icinga.org/) *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software Foundation *
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
******************************************************************************/
#include "i2-base.h"
using namespace icinga;
vector<Logger::Ptr> Logger::m_Loggers;
Logger::Logger(LogSeverity minSeverity)
: m_MinSeverity(minSeverity)
{ }
/**
* Writes a message to the application's log.
*
* @param severity The message severity.
* @param facility The log facility.
* @param message The message.
*/
void Logger::Write(LogSeverity severity, const string& facility,
const string& message)
{
LogEntry entry;
time(&entry.Timestamp);
entry.Severity = severity;
entry.Facility = facility;
entry.Message = message;
Event::Ptr ev = boost::make_shared<Event>();
ev->OnEventDelivered.connect(boost::bind(&Logger::ForwardLogEntry, entry));
Event::Post(ev);
}
void Logger::RegisterLogger(const Logger::Ptr& logger)
{
m_Loggers.push_back(logger);
}
LogSeverity Logger::GetMinSeverity(void) const
{
return m_MinSeverity;
}
void Logger::ForwardLogEntry(const LogEntry& entry)
{
vector<Logger::Ptr>::iterator it;
for (it = m_Loggers.begin(); it != m_Loggers.end(); it++) {
Logger::Ptr logger = *it;
if (entry.Severity >= logger->GetMinSeverity())
logger->ProcessLogEntry(entry);
}
}

74
base/logger.h Normal file
View File

@ -0,0 +1,74 @@
/******************************************************************************
* Icinga 2 *
* Copyright (C) 2012 Icinga Development Team (http://www.icinga.org/) *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software Foundation *
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
******************************************************************************/
#ifndef LOGGER_H
#define LOGGER_H
namespace icinga
{
/**
* Log severity.
*
* @ingroup base
*/
enum LogSeverity
{
LogDebug,
LogInformation,
LogWarning,
LogCritical
};
struct LogEntry {
time_t Timestamp;
LogSeverity Severity;
string Facility;
string Message;
};
class I2_BASE_API Logger : public Object
{
public:
typedef shared_ptr<Logger> Ptr;
typedef weak_ptr<Logger> WeakPtr;
Logger(LogSeverity minSeverity = LogDebug);
static void Write(LogSeverity severity, const string& facility,
const string& message);
static void RegisterLogger(const Logger::Ptr& logger);
protected:
virtual void ProcessLogEntry(const LogEntry& entry) = 0;
LogSeverity GetMinSeverity(void) const;
private:
LogSeverity m_MinSeverity;
static vector<Logger::Ptr> m_Loggers;
static void ForwardLogEntry(const LogEntry& entry);
};
}
#endif /* LOGGER_H */

View File

@ -81,7 +81,7 @@ long Timer::ProcessTimers(void)
stringstream msgbuf; stringstream msgbuf;
msgbuf << "Timers took " << et - st << " seconds"; msgbuf << "Timers took " << et - st << " seconds";
Application::Log(LogDebug, "base", msgbuf.str()); Logger::Write(LogDebug, "base", msgbuf.str());
return wakeup; return wakeup;
} }
@ -104,7 +104,7 @@ void Timer::Call(void)
if (et - st > 3) { if (et - st > 3) {
stringstream msgbuf; stringstream msgbuf;
msgbuf << "Timer call took " << et - st << " seconds."; msgbuf << "Timer call took " << et - st << " seconds.";
Application::Log(LogWarning, "base", msgbuf.str()); Logger::Write(LogWarning, "base", msgbuf.str());
} }
} }

View File

@ -62,7 +62,7 @@ void CheckerComponent::CheckTimerHandler(void)
time_t now; time_t now;
time(&now); time(&now);
Application::Log(LogDebug, "checker", "CheckTimerHandler entered."); Logger::Write(LogDebug, "checker", "CheckTimerHandler entered.");
long tasks = 0; long tasks = 0;
@ -74,7 +74,7 @@ void CheckerComponent::CheckTimerHandler(void)
m_Services.pop(); m_Services.pop();
Application::Log(LogDebug, "checker", "Executing service check for '" + service.GetName() + "'"); Logger::Write(LogDebug, "checker", "Executing service check for '" + service.GetName() + "'");
m_PendingServices.insert(service.GetConfigObject()); m_PendingServices.insert(service.GetConfigObject());
@ -84,18 +84,18 @@ void CheckerComponent::CheckTimerHandler(void)
tasks++; tasks++;
} }
Application::Log(LogDebug, "checker", "CheckTimerHandler: past loop."); Logger::Write(LogDebug, "checker", "CheckTimerHandler: past loop.");
CheckTask::FlushQueue(); CheckTask::FlushQueue();
stringstream msgbuf; stringstream msgbuf;
msgbuf << "CheckTimerHandler: created " << tasks << " tasks"; msgbuf << "CheckTimerHandler: created " << tasks << " tasks";
Application::Log(LogInformation, "checker", msgbuf.str()); Logger::Write(LogInformation, "checker", msgbuf.str());
} }
void CheckerComponent::ResultTimerHandler(void) void CheckerComponent::ResultTimerHandler(void)
{ {
Application::Log(LogDebug, "checker", "ResultTimerHandler entered."); Logger::Write(LogDebug, "checker", "ResultTimerHandler entered.");
time_t now; time_t now;
time(&now); time(&now);
@ -115,7 +115,7 @@ void CheckerComponent::ResultTimerHandler(void)
continue; continue;
CheckResult result = task->GetResult(); CheckResult result = task->GetResult();
Application::Log(LogDebug, "checker", "Got result for service '" + service.GetName() + "'"); Logger::Write(LogDebug, "checker", "Got result for service '" + service.GetName() + "'");
long execution_time = result.GetExecutionEnd() - result.GetExecutionStart(); long execution_time = result.GetExecutionEnd() - result.GetExecutionStart();
long latency = (result.GetScheduleEnd() - result.GetScheduleStart()) - execution_time; long latency = (result.GetScheduleEnd() - result.GetScheduleStart()) - execution_time;
@ -161,19 +161,19 @@ void CheckerComponent::ResultTimerHandler(void)
if (min_latency > 5) { if (min_latency > 5) {
stringstream latwarn; stringstream latwarn;
latwarn << "We can't keep up with the checks: minimum latency is " << min_latency << " seconds"; latwarn << "We can't keep up with the checks: minimum latency is " << min_latency << " seconds";
Application::Log(LogWarning, "checker", latwarn.str()); Logger::Write(LogWarning, "checker", latwarn.str());
} }
{ {
stringstream msgbuf; stringstream msgbuf;
msgbuf << "ResultTimerHandler: " << results << " results (" << failed << " failed); latency: avg=" << avg_latency / (results ? results : 1) << ", min=" << min_latency << ", max: " << max_latency; msgbuf << "ResultTimerHandler: " << results << " results (" << failed << " failed); latency: avg=" << avg_latency / (results ? results : 1) << ", min=" << min_latency << ", max: " << max_latency;
Application::Log(LogInformation, "checker", msgbuf.str()); Logger::Write(LogInformation, "checker", msgbuf.str());
} }
{ {
stringstream msgbuf; stringstream msgbuf;
msgbuf << "Pending services: " << m_PendingServices.size() << "; Idle services: " << m_Services.size(); msgbuf << "Pending services: " << m_PendingServices.size() << "; Idle services: " << m_Services.size();
Application::Log(LogInformation, "checker", msgbuf.str()); Logger::Write(LogInformation, "checker", msgbuf.str());
} }
} }
@ -191,7 +191,7 @@ void CheckerComponent::AssignServiceRequestHandler(const Endpoint::Ptr& sender,
Service service(object); Service service(object);
m_Services.push(service); m_Services.push(service);
Application::Log(LogDebug, "checker", "Accepted delegation for service '" + service.GetName() + "'"); Logger::Write(LogDebug, "checker", "Accepted delegation for service '" + service.GetName() + "'");
string id; string id;
if (request.GetID(&id)) { if (request.GetID(&id)) {
@ -206,7 +206,7 @@ void CheckerComponent::AssignServiceRequestHandler(const Endpoint::Ptr& sender,
void CheckerComponent::ClearServicesRequestHandler(const Endpoint::Ptr& sender, const RequestMessage& request) void CheckerComponent::ClearServicesRequestHandler(const Endpoint::Ptr& sender, const RequestMessage& request)
{ {
Application::Log(LogInformation, "checker", "Clearing service delegations."); Logger::Write(LogInformation, "checker", "Clearing service delegations.");
/* clear the services lists */ /* clear the services lists */
m_Services = ServiceQueue(); m_Services = ServiceQueue();

View File

@ -39,7 +39,7 @@ void ConfigFileComponent::Start(void)
vector<ConfigItem::Ptr> configItems = ConfigCompiler::CompileFile(filename); vector<ConfigItem::Ptr> configItems = ConfigCompiler::CompileFile(filename);
Application::Log(LogInformation, "configfile", "Executing config items..."); Logger::Write(LogInformation, "configfile", "Executing config items...");
vector<ConfigItem::Ptr>::iterator it; vector<ConfigItem::Ptr>::iterator it;
for (it = configItems.begin(); it != configItems.end(); it++) { for (it = configItems.begin(); it != configItems.end(); it++) {

View File

@ -99,7 +99,7 @@ void DelegationComponent::AssignService(const Endpoint::Ptr& checker, const Serv
params.Set("service", service.GetConfigObject()->GetProperties()); params.Set("service", service.GetConfigObject()->GetProperties());
request.SetParams(params); request.SetParams(params);
Application::Log(LogDebug, "delegation", "Trying to delegate service '" + service.GetName() + "'"); Logger::Write(LogDebug, "delegation", "Trying to delegate service '" + service.GetName() + "'");
EndpointManager::GetInstance()->SendUnicastMessage(m_Endpoint, checker, request); EndpointManager::GetInstance()->SendUnicastMessage(m_Endpoint, checker, request);
} }
@ -108,7 +108,7 @@ void DelegationComponent::ClearServices(const Endpoint::Ptr& checker)
{ {
stringstream msgbuf; stringstream msgbuf;
msgbuf << "Clearing assigned services for endpoint '" << checker->GetIdentity() << "'"; msgbuf << "Clearing assigned services for endpoint '" << checker->GetIdentity() << "'";
Application::Log(LogInformation, "delegation", msgbuf.str()); Logger::Write(LogInformation, "delegation", msgbuf.str());
RequestMessage request; RequestMessage request;
request.SetMethod("checker::ClearServices"); request.SetMethod("checker::ClearServices");
@ -227,7 +227,7 @@ void DelegationComponent::DelegationTimerHandler(void)
stringstream msgbuf; stringstream msgbuf;
msgbuf << "Service: " << service.GetName() << ", candidates: " << candidates.size(); msgbuf << "Service: " << service.GetName() << ", candidates: " << candidates.size();
Application::Log(LogDebug, "delegation", msgbuf.str()); Logger::Write(LogDebug, "delegation", msgbuf.str());
for (cit = candidates.begin(); cit != candidates.end(); cit++) for (cit = candidates.begin(); cit != candidates.end(); cit++)
avg_services += histogram[*cit]; avg_services += histogram[*cit];
@ -275,7 +275,7 @@ void DelegationComponent::DelegationTimerHandler(void)
for (hit = histogram.begin(); hit != histogram.end(); hit++) { for (hit = histogram.begin(); hit != histogram.end(); hit++) {
stringstream msgbuf; stringstream msgbuf;
msgbuf << "histogram: " << hit->first->GetIdentity() << " - " << hit->second; msgbuf << "histogram: " << hit->first->GetIdentity() << " - " << hit->second;
Application::Log(LogInformation, "delegation", msgbuf.str()); Logger::Write(LogInformation, "delegation", msgbuf.str());
} }
if (delegated > 0) { if (delegated > 0) {
@ -299,7 +299,7 @@ void DelegationComponent::DelegationTimerHandler(void)
stringstream msgbuf; stringstream msgbuf;
msgbuf << "Updated delegations for " << delegated << " services"; msgbuf << "Updated delegations for " << delegated << " services";
Application::Log(LogInformation, "delegation", msgbuf.str()); Logger::Write(LogInformation, "delegation", msgbuf.str());
} }
void DelegationComponent::CheckResultRequestHandler(const Endpoint::Ptr& sender, const RequestMessage& request) void DelegationComponent::CheckResultRequestHandler(const Endpoint::Ptr& sender, const RequestMessage& request)

View File

@ -66,7 +66,7 @@ void DemoComponent::Stop(void)
*/ */
void DemoComponent::DemoTimerHandler(void) void DemoComponent::DemoTimerHandler(void)
{ {
Application::Log(LogInformation, "demo", "Sending multicast 'hello world' message."); Logger::Write(LogInformation, "demo", "Sending multicast 'hello world' message.");
RequestMessage request; RequestMessage request;
request.SetMethod("demo::HelloWorld"); request.SetMethod("demo::HelloWorld");
@ -79,7 +79,7 @@ void DemoComponent::DemoTimerHandler(void)
*/ */
void DemoComponent::HelloWorldRequestHandler(const Endpoint::Ptr& sender, const RequestMessage& request) void DemoComponent::HelloWorldRequestHandler(const Endpoint::Ptr& sender, const RequestMessage& request)
{ {
Application::Log(LogInformation, "demo", "Got 'hello world' from address=" + sender->GetAddress() + ", identity=" + sender->GetIdentity()); Logger::Write(LogInformation, "demo", "Got 'hello world' from address=" + sender->GetAddress() + ", identity=" + sender->GetIdentity());
} }
EXPORT_COMPONENT(demo, DemoComponent); EXPORT_COMPONENT(demo, DemoComponent);

View File

@ -93,7 +93,7 @@ void DiscoveryComponent::CheckExistingEndpoint(const Endpoint::Ptr& self, const
return; return;
if (self->GetIdentity() == other->GetIdentity()) { if (self->GetIdentity() == other->GetIdentity()) {
Application::Log(LogWarning, "discovery", "Detected duplicate identity:" + other->GetIdentity() + " - Disconnecting old endpoint."); Logger::Write(LogWarning, "discovery", "Detected duplicate identity:" + other->GetIdentity() + " - Disconnecting old endpoint.");
other->Stop(); other->Stop();
EndpointManager::GetInstance()->UnregisterEndpoint(other); EndpointManager::GetInstance()->UnregisterEndpoint(other);
@ -122,7 +122,7 @@ void DiscoveryComponent::NewEndpointHandler(const Endpoint::Ptr& endpoint)
string identity = endpoint->GetIdentity(); string identity = endpoint->GetIdentity();
if (identity == EndpointManager::GetInstance()->GetIdentity()) { if (identity == EndpointManager::GetInstance()->GetIdentity()) {
Application::Log(LogWarning, "discovery", "Detected loop-back connection - Disconnecting endpoint."); Logger::Write(LogWarning, "discovery", "Detected loop-back connection - Disconnecting endpoint.");
endpoint->Stop(); endpoint->Stop();
EndpointManager::GetInstance()->UnregisterEndpoint(endpoint); EndpointManager::GetInstance()->UnregisterEndpoint(endpoint);
@ -521,7 +521,7 @@ void DiscoveryComponent::DiscoveryTimerHandler(void)
} catch (const std::exception& ex) { } catch (const std::exception& ex) {
stringstream msgbuf; stringstream msgbuf;
msgbuf << "Exception while trying to reconnect to endpoint '" << endpoint->GetIdentity() << "': " << ex.what();; msgbuf << "Exception while trying to reconnect to endpoint '" << endpoint->GetIdentity() << "': " << ex.what();;
Application::Log(LogInformation, "discovery", msgbuf.str()); Logger::Write(LogInformation, "discovery", msgbuf.str());
} }
} }
} }

View File

@ -370,8 +370,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
*yy_cp = '\0'; \ *yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp; yyg->yy_c_buf_p = yy_cp;
#define YY_NUM_RULES 23 #define YY_NUM_RULES 22
#define YY_END_OF_BUFFER 24 #define YY_END_OF_BUFFER 23
/* This struct is not used in this scanner, /* This struct is not used in this scanner,
but its presence is necessary. */ but its presence is necessary. */
struct yy_trans_info struct yy_trans_info
@ -379,16 +379,15 @@ struct yy_trans_info
flex_int32_t yy_verify; flex_int32_t yy_verify;
flex_int32_t yy_nxt; flex_int32_t yy_nxt;
}; };
static yyconst flex_int16_t yy_accept[72] = static yyconst flex_int16_t yy_accept[70] =
{ 0, { 0,
0, 0, 0, 0, 24, 22, 21, 21, 22, 22, 0, 0, 0, 0, 23, 21, 20, 20, 21, 21,
22, 22, 22, 22, 9, 10, 7, 7, 7, 7, 21, 21, 21, 9, 10, 7, 7, 7, 7, 7,
7, 7, 17, 18, 21, 0, 8, 20, 13, 11, 7, 17, 18, 20, 0, 8, 13, 11, 12, 15,
12, 15, 0, 14, 9, 7, 7, 7, 7, 7, 0, 14, 9, 7, 7, 7, 7, 7, 7, 17,
7, 17, 16, 19, 7, 7, 7, 7, 7, 7, 16, 19, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 6, 7, 7, 7, 7, 2, 7, 7, 6, 7, 7, 7, 7, 2, 7, 7,
7, 7, 7, 7, 3, 7, 4, 7, 1, 5, 7, 7, 3, 7, 4, 7, 1, 5, 0
0
} ; } ;
static yyconst flex_int32_t yy_ec[256] = static yyconst flex_int32_t yy_ec[256] =
@ -396,17 +395,17 @@ static yyconst flex_int32_t yy_ec[256] =
1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 2, 1, 4, 5, 1, 1, 1, 1, 1, 1, 2, 1, 4, 1, 1, 1, 1, 1, 1,
1, 6, 7, 1, 8, 1, 9, 10, 10, 10, 1, 5, 6, 1, 7, 1, 8, 9, 9, 9,
10, 10, 10, 10, 10, 10, 10, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1,
11, 1, 1, 1, 12, 12, 12, 12, 12, 12, 10, 1, 1, 1, 11, 11, 11, 11, 11, 11,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
1, 1, 1, 1, 12, 1, 13, 14, 15, 16, 1, 1, 1, 1, 11, 1, 12, 13, 14, 15,
17, 12, 12, 18, 19, 20, 12, 21, 12, 22, 16, 11, 11, 17, 18, 19, 11, 20, 11, 21,
23, 12, 12, 24, 25, 26, 27, 12, 12, 12, 22, 11, 11, 23, 24, 25, 26, 11, 11, 11,
12, 12, 1, 1, 1, 1, 1, 1, 1, 1, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@ -423,78 +422,76 @@ static yyconst flex_int32_t yy_ec[256] =
1, 1, 1, 1, 1 1, 1, 1, 1, 1
} ; } ;
static yyconst flex_int32_t yy_meta[28] = static yyconst flex_int32_t yy_meta[27] =
{ 0, { 0,
1, 1, 2, 1, 1, 3, 1, 4, 1, 4, 1, 1, 2, 1, 3, 1, 4, 1, 4, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4 4, 4, 4, 4, 4, 4
} ; } ;
static yyconst flex_int16_t yy_base[78] = static yyconst flex_int16_t yy_base[75] =
{ 0, { 0,
0, 0, 90, 89, 94, 97, 26, 28, 89, 0, 0, 0, 87, 86, 90, 93, 25, 27, 85, 78,
81, 80, 79, 26, 79, 97, 0, 74, 65, 63, 77, 76, 26, 76, 93, 0, 71, 62, 60, 55,
58, 70, 0, 74, 31, 78, 97, 0, 97, 97, 67, 0, 71, 30, 74, 93, 93, 93, 93, 93,
97, 97, 0, 97, 71, 0, 55, 21, 64, 57, 0, 93, 68, 0, 52, 21, 61, 54, 54, 0,
57, 0, 97, 0, 50, 54, 57, 60, 51, 54, 93, 0, 47, 51, 54, 57, 48, 51, 43, 39,
46, 42, 44, 46, 0, 51, 52, 48, 44, 0, 41, 43, 0, 48, 49, 45, 41, 0, 33, 43,
36, 46, 43, 31, 0, 28, 0, 24, 0, 0, 40, 30, 0, 27, 0, 25, 0, 0, 93, 38,
97, 39, 43, 47, 34, 51, 55 42, 33, 46, 50
} ; } ;
static yyconst flex_int16_t yy_def[78] = static yyconst flex_int16_t yy_def[75] =
{ 0, { 0,
71, 1, 72, 72, 71, 71, 71, 71, 73, 74, 69, 1, 70, 70, 69, 69, 69, 69, 71, 69,
71, 71, 71, 71, 71, 71, 75, 75, 75, 75, 69, 69, 69, 69, 69, 72, 72, 72, 72, 72,
75, 75, 76, 71, 71, 73, 71, 74, 71, 71, 72, 73, 69, 69, 71, 69, 69, 69, 69, 69,
71, 71, 77, 71, 71, 75, 75, 75, 75, 75, 74, 69, 69, 72, 72, 72, 72, 72, 72, 73,
75, 76, 71, 77, 75, 75, 75, 75, 75, 75, 69, 74, 72, 72, 72, 72, 72, 72, 72, 72,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 72, 72, 72, 72, 72, 72, 72, 72, 0, 69,
0, 71, 71, 71, 71, 71, 71 69, 69, 69, 69
} ; } ;
static yyconst flex_int16_t yy_nxt[125] = static yyconst flex_int16_t yy_nxt[120] =
{ 0, { 0,
6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 17, 17, 17, 17, 17, 19, 17, 16, 17, 16, 16, 16, 16, 16, 18, 16, 19,
20, 21, 22, 17, 17, 17, 17, 25, 25, 25, 20, 21, 16, 16, 16, 16, 24, 24, 24, 24,
25, 32, 25, 25, 33, 46, 34, 36, 47, 23, 30, 24, 24, 31, 44, 32, 34, 45, 22, 22,
23, 23, 23, 26, 26, 26, 26, 28, 70, 28, 22, 22, 25, 25, 25, 25, 40, 40, 68, 40,
28, 42, 42, 69, 42, 44, 68, 44, 44, 67, 42, 67, 42, 42, 66, 65, 64, 63, 62, 61,
66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51,
56, 55, 54, 53, 52, 51, 50, 49, 48, 45, 50, 49, 48, 47, 46, 43, 33, 26, 41, 39,
35, 27, 43, 41, 40, 39, 38, 37, 35, 31, 38, 37, 36, 35, 33, 29, 28, 27, 26, 69,
30, 29, 27, 71, 24, 24, 5, 71, 71, 71, 23, 23, 5, 69, 69, 69, 69, 69, 69, 69,
71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 69, 69, 69, 69, 69, 69, 69, 69, 69
71, 71, 71, 71
} ; } ;
static yyconst flex_int16_t yy_chk[125] = static yyconst flex_int16_t yy_chk[120] =
{ 0, { 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 7, 7, 8, 1, 1, 1, 1, 1, 1, 7, 7, 8, 8,
8, 14, 25, 25, 14, 38, 14, 75, 38, 72, 13, 24, 24, 13, 36, 13, 72, 36, 70, 70,
72, 72, 72, 73, 73, 73, 73, 74, 68, 74, 70, 70, 71, 71, 71, 71, 73, 73, 66, 73,
74, 76, 76, 66, 76, 77, 64, 77, 77, 63, 74, 64, 74, 74, 62, 61, 60, 59, 57, 56,
62, 61, 59, 58, 57, 56, 54, 53, 52, 51, 55, 54, 52, 51, 50, 49, 48, 47, 46, 45,
50, 49, 48, 47, 46, 45, 41, 40, 39, 37, 44, 43, 39, 38, 37, 35, 33, 25, 23, 21,
35, 26, 24, 22, 21, 20, 19, 18, 15, 13, 20, 19, 18, 17, 14, 12, 11, 10, 9, 5,
12, 11, 9, 5, 4, 3, 71, 71, 71, 71, 4, 3, 69, 69, 69, 69, 69, 69, 69, 69,
71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 69, 69, 69, 69, 69, 69, 69, 69, 69
71, 71, 71, 71
} ; } ;
/* Table of booleans, true if rule could match eol. */ /* Table of booleans, true if rule could match eol. */
static yyconst flex_int32_t yy_rule_can_match_eol[24] = static yyconst flex_int32_t yy_rule_can_match_eol[23] =
{ 0, { 0,
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 1, 0, 0, }; 1, 0, 0, };
/* The intent behind this definition is that it'll catch /* The intent behind this definition is that it'll catch
* any uses of REJECT which flex missed. * any uses of REJECT which flex missed.
@ -546,7 +543,7 @@ do { \
} while (0) } while (0)
#define YY_NO_UNISTD_H 1 #define YY_NO_UNISTD_H 1
#line 550 "config_lexer.cc" #line 547 "config_lexer.cc"
#define INITIAL 0 #define INITIAL 0
#define IN_C_COMMENT 1 #define IN_C_COMMENT 1
@ -795,7 +792,7 @@ YY_DECL
#line 49 "config_lexer.ll" #line 49 "config_lexer.ll"
#line 799 "config_lexer.cc" #line 796 "config_lexer.cc"
yylval = yylval_param; yylval = yylval_param;
@ -852,13 +849,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 72 ) if ( yy_current_state >= 70 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp; ++yy_cp;
} }
while ( yy_current_state != 71 ); while ( yy_current_state != 69 );
yy_cp = yyg->yy_last_accepting_cpos; yy_cp = yyg->yy_last_accepting_cpos;
yy_current_state = yyg->yy_last_accepting_state; yy_current_state = yyg->yy_last_accepting_state;
@ -992,27 +989,22 @@ YY_RULE_SETUP
/* ignore C++-style comments */ /* ignore C++-style comments */
YY_BREAK YY_BREAK
case 20: case 20:
/* rule 20 can match eol */
YY_RULE_SETUP YY_RULE_SETUP
#line 76 "config_lexer.ll" #line 76 "config_lexer.ll"
/* ignore shell-style comments */ /* ignore whitespace */
YY_BREAK YY_BREAK
case 21: case 21:
/* rule 21 can match eol */
YY_RULE_SETUP YY_RULE_SETUP
#line 77 "config_lexer.ll" #line 78 "config_lexer.ll"
/* ignore whitespace */ return yytext[0];
YY_BREAK YY_BREAK
case 22: case 22:
YY_RULE_SETUP YY_RULE_SETUP
#line 79 "config_lexer.ll" #line 79 "config_lexer.ll"
return yytext[0];
YY_BREAK
case 23:
YY_RULE_SETUP
#line 80 "config_lexer.ll"
ECHO; ECHO;
YY_BREAK YY_BREAK
#line 1016 "config_lexer.cc" #line 1008 "config_lexer.cc"
case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(IN_C_COMMENT): case YY_STATE_EOF(IN_C_COMMENT):
yyterminate(); yyterminate();
@ -1308,7 +1300,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 72 ) if ( yy_current_state >= 70 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@ -1337,11 +1329,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 72 ) if ( yy_current_state >= 70 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
yy_is_jam = (yy_current_state == 71); yy_is_jam = (yy_current_state == 69);
return yy_is_jam ? 0 : yy_current_state; return yy_is_jam ? 0 : yy_current_state;
} }
@ -2200,7 +2192,7 @@ void yyfree (void * ptr , yyscan_t yyscanner)
#define YYTABLES_NAME "yytables" #define YYTABLES_NAME "yytables"
#line 80 "config_lexer.ll" #line 79 "config_lexer.ll"

View File

@ -73,7 +73,6 @@ null return T_NULL;
} }
\/\/[^\n]+ /* ignore C++-style comments */ \/\/[^\n]+ /* ignore C++-style comments */
#[^\n]+ /* ignore shell-style comments */
[ \t\n]+ /* ignore whitespace */ [ \t\n]+ /* ignore whitespace */
. return yytext[0]; . return yytext[0];

View File

@ -78,7 +78,7 @@ vector<ConfigItem::Ptr> ConfigCompiler::CompileFile(const string& path)
if (!stream.good()) if (!stream.good())
throw invalid_argument("Could not open config file: " + path); throw invalid_argument("Could not open config file: " + path);
Application::Log(LogInformation, "dyn", "Compiling config file: " + path); Logger::Write(LogInformation, "dyn", "Compiling config file: " + path);
return CompileStream(path, &stream); return CompileStream(path, &stream);
} }

View File

@ -86,7 +86,7 @@ void EndpointManager::AddListener(string service)
stringstream s; stringstream s;
s << "Adding new listener: port " << service; s << "Adding new listener: port " << service;
Application::Log(LogInformation, "icinga", s.str()); Logger::Write(LogInformation, "icinga", s.str());
JsonRpcServer::Ptr server = boost::make_shared<JsonRpcServer>(m_SSLContext); JsonRpcServer::Ptr server = boost::make_shared<JsonRpcServer>(m_SSLContext);
RegisterServer(server); RegisterServer(server);
@ -106,7 +106,7 @@ void EndpointManager::AddConnection(string node, string service)
{ {
stringstream s; stringstream s;
s << "Adding new endpoint: [" << node << "]:" << service; s << "Adding new endpoint: [" << node << "]:" << service;
Application::Log(LogInformation, "icinga", s.str()); Logger::Write(LogInformation, "icinga", s.str());
JsonRpcEndpoint::Ptr endpoint = boost::make_shared<JsonRpcEndpoint>(); JsonRpcEndpoint::Ptr endpoint = boost::make_shared<JsonRpcEndpoint>();
RegisterEndpoint(endpoint); RegisterEndpoint(endpoint);
@ -132,7 +132,7 @@ void EndpointManager::RegisterServer(JsonRpcServer::Ptr server)
*/ */
void EndpointManager::NewClientHandler(const TcpClient::Ptr& client) void EndpointManager::NewClientHandler(const TcpClient::Ptr& client)
{ {
Application::Log(LogInformation, "icinga", "Accepted new client from " + client->GetPeerAddress()); Logger::Write(LogInformation, "icinga", "Accepted new client from " + client->GetPeerAddress());
JsonRpcEndpoint::Ptr endpoint = boost::make_shared<JsonRpcEndpoint>(); JsonRpcEndpoint::Ptr endpoint = boost::make_shared<JsonRpcEndpoint>();
endpoint->SetClient(static_pointer_cast<JsonRpcClient>(client)); endpoint->SetClient(static_pointer_cast<JsonRpcClient>(client));

View File

@ -36,10 +36,13 @@ using namespace icinga;
*/ */
int IcingaApplication::Main(const vector<string>& args) int IcingaApplication::Main(const vector<string>& args)
{ {
ConsoleLogger::Ptr consoleLogger = boost::make_shared<ConsoleLogger>(LogInformation);
Logger::RegisterLogger(consoleLogger);
#ifdef _WIN32 #ifdef _WIN32
Application::Log(LogInformation, "icinga", "Icinga component loader"); Logger::Write(LogInformation, "icinga", "Icinga component loader");
#else /* _WIN32 */ #else /* _WIN32 */
Application::Log(LogInformation, "icinga", "Icinga component loader (version: " ICINGA_VERSION ")"); Logger::Write(LogInformation, "icinga", "Icinga component loader (version: " ICINGA_VERSION ")");
#endif /* _WIN32 */ #endif /* _WIN32 */
time(&m_StartTime); time(&m_StartTime);
@ -47,7 +50,7 @@ int IcingaApplication::Main(const vector<string>& args)
if (args.size() < 2) { if (args.size() < 2) {
stringstream msgbuf; stringstream msgbuf;
msgbuf << "Syntax: " << args[0] << " <config-file>"; msgbuf << "Syntax: " << args[0] << " <config-file>";
Application::Log(LogInformation, "icinga", msgbuf.str()); Logger::Write(LogInformation, "icinga", msgbuf.str());
return EXIT_FAILURE; return EXIT_FAILURE;
} }
@ -93,7 +96,7 @@ int IcingaApplication::Main(const vector<string>& args)
/* set up SSL context */ /* set up SSL context */
shared_ptr<X509> cert = Utility::GetX509Certificate(GetCertificateFile()); shared_ptr<X509> cert = Utility::GetX509Certificate(GetCertificateFile());
string identity = Utility::GetCertificateCN(cert); string identity = Utility::GetCertificateCN(cert);
Application::Log(LogInformation, "icinga", "My identity: " + identity); Logger::Write(LogInformation, "icinga", "My identity: " + identity);
EndpointManager::GetInstance()->SetIdentity(identity); EndpointManager::GetInstance()->SetIdentity(identity);
shared_ptr<SSL_CTX> sslContext = Utility::MakeSSLContext(GetCertificateFile(), GetCertificateFile(), GetCAFile()); shared_ptr<SSL_CTX> sslContext = Utility::MakeSSLContext(GetCertificateFile(), GetCertificateFile(), GetCAFile());

View File

@ -109,7 +109,7 @@ void JsonRpcEndpoint::NewMessageHandler(const MessagePart& message)
void JsonRpcEndpoint::ClientClosedHandler(void) void JsonRpcEndpoint::ClientClosedHandler(void)
{ {
Application::Log(LogWarning, "jsonrpc", "Lost connection to endpoint: identity=" + GetIdentity()); Logger::Write(LogWarning, "jsonrpc", "Lost connection to endpoint: identity=" + GetIdentity());
// TODO: _only_ clear non-persistent publications/subscriptions // TODO: _only_ clear non-persistent publications/subscriptions
// unregister ourselves if no persistent publications/subscriptions are left (use a timer for that, once we have a TTL property for the topics) // unregister ourselves if no persistent publications/subscriptions are left (use a timer for that, once we have a TTL property for the topics)
@ -132,7 +132,7 @@ void JsonRpcEndpoint::ClientErrorHandler(const std::exception& ex)
stringstream message; stringstream message;
message << "Error occured for JSON-RPC socket: Message=" << ex.what(); message << "Error occured for JSON-RPC socket: Message=" << ex.what();
Application::Log(LogWarning, "jsonrpc", message.str()); Logger::Write(LogWarning, "jsonrpc", message.str());
} }
void JsonRpcEndpoint::CertificateValidatedHandler(void) void JsonRpcEndpoint::CertificateValidatedHandler(void)

View File

@ -65,7 +65,7 @@ void JsonRpcClient::DataAvailableHandler(void)
message = MessagePart(jsonString); message = MessagePart(jsonString);
OnNewMessage(GetSelf(), message); OnNewMessage(GetSelf(), message);
} catch (const std::exception& ex) { } catch (const std::exception& ex) {
Application::Log(LogCritical, "jsonrpc", "Exception while processing message from JSON-RPC client: " + string(ex.what())); Logger::Write(LogCritical, "jsonrpc", "Exception while processing message from JSON-RPC client: " + string(ex.what()));
} }
} }
} }