//Called when Logging manager is created. Create logging agents based on settings bool CLoggingManager::init(IPropertyTree* cfg, const char* service) { if (!cfg) { ERRLOG(EspLoggingErrors::ConfigurationFileEntryError, "Logging Manager setting not found for %s", service); return false; } Owned<IPTreeIterator> loggingAgentSettings = cfg->getElements("LogAgent"); ForEach(*loggingAgentSettings) { IPropertyTree& loggingAgentTree = loggingAgentSettings->query(); const char* agentName = loggingAgentTree.queryProp("@name"); const char* agentType = loggingAgentTree.queryProp("@type"); const char* agentPlugin = loggingAgentTree.queryProp("@plugin"); if (!agentName || !*agentName || !agentPlugin || !*agentPlugin) continue; IEspLogAgent* loggingAgent = loadLoggingAgent(agentName, agentPlugin, service, cfg); if (!loggingAgent) { ERRLOG(-1, "Failed to create logging agent for %s", agentName); continue; } loggingAgent->init(agentName, agentType, &loggingAgentTree, service); IUpdateLogThread* logThread = createUpdateLogThread(&loggingAgentTree, service, agentName, loggingAgent); if(!logThread) throw MakeStringException(-1, "Failed to create update log thread for %s", agentName); loggingAgentThreads.push_back(logThread); } initialized = true; return !loggingAgentThreads.empty(); }
bool CWsLoggingServiceEx::init(const char* service, const char* type, IPropertyTree* cfg, const char* process) { VStringBuffer xpath("Software/EspProcess[@name=\"%s\"]/EspService[@name=\"%s\"]", process, service); Owned<IPropertyTree> pServiceNode = cfg->getPropTree(xpath.str()); if (!pServiceNode) throw MakeStringException(-1, "No settings found for service %s", service); Owned<IPropertyTreeIterator> logAgents = pServiceNode->getElements("LogAgent"); if (!logAgents) throw MakeStringException(-1, "No logAgent is defined for service %s", service); ForEach(*logAgents) { IPropertyTree& ptree = logAgents->query(); const char* agentName = ptree.queryProp("@name"); const char* agentType = ptree.queryProp("@type"); const char* agentPlugin = ptree.queryProp("@plugin"); if (!agentName || !*agentName || !agentPlugin || !*agentPlugin) continue; IEspLogAgent* logAgent = loadLoggingAgent(agentName, agentPlugin); if (!logAgent) { ERRLOG(-1, "Failed to create logging agent for %s", agentName); continue; } logAgent->init(agentName, agentType, &ptree, process); IUpdateLogThread* logThread = createUpdateLogThread(&ptree, service, agentName, logAgent); if(!logThread) throw MakeStringException(-1, "Failed to create update log thread for %s", agentName); loggingAgentThreads.push_back(logThread); } return true; }