Files
src-1.2/engine/server/application/LogServer/src/shared/LoggingServerApiObserver.cpp
T
2014-01-16 20:38:03 -07:00

129 lines
3.7 KiB
C++

// LoggingServerApiObserver.cpp
// Copyright 2000-02, Sony Online Entertainment Inc., all rights reserved.
// Author: Justin Randall
//-----------------------------------------------------------------------
#include "FirstLogServer.h"
#include "ConfigLogServer.h"
#include "LoggingServerApiObserver.h"
#include "LoggingServerApi.h"
#include "sharedLog/LogManager.h"
#include "sharedNetworkMessages/LogMessage.h"
#include "UnicodeUtils.h"
//-----------------------------------------------------------------------
LoggingServerApiObserver::LoggingServerApiObserver() :
m_loggingServerApi(new LoggingServerApi(0, ConfigLogServer::getLoggingServerApiQueueSize()))
{
m_loggingServerApi->Connect(ConfigLogServer::getLoggingServerApiAddress(), LoggingServerApi::cDefaultPort, ConfigLogServer::getLoggingServerApiLoginName(), ConfigLogServer::getLoggingServerApiPassword(), ConfigLogServer::getLoggingServerApiDefaultDirectory());
}
//-----------------------------------------------------------------------
LoggingServerApiObserver::~LoggingServerApiObserver()
{
flush();
delete m_loggingServerApi;
}
//-----------------------------------------------------------------------
void LoggingServerApiObserver::install()
{
LogManager::registerObserverType("LoggingServerApi", create);
}
//-----------------------------------------------------------------------
LogObserver * LoggingServerApiObserver::create(const std::string &)
{
return new LoggingServerApiObserver();
}
//-----------------------------------------------------------------------
void LoggingServerApiObserver::log(const LogMessage & msg)
{
const char * procId = "\0";
const char * channel = "\0";
std::string fileName = "misc.txt";
if(!msg.getProcId().empty())
procId = msg.getProcId().c_str();
if(! msg.getChannel().empty())
channel = msg.getChannel().c_str();
std::string msgText;
if(! msg.getText().empty())
{
time_t now;
tm t;
IGNORE_RETURN( time(&now) );
IGNORE_RETURN( gmtime_r(&now, &t) );
char dirBuf[128] = {"\0"};
snprintf(dirBuf, sizeof(dirBuf), "%d/%d/%d/", t.tm_year + 1900, t.tm_mon + 1, t.tm_mday);
fileName = ConfigLogServer::getClusterName();
fileName += "/";
fileName += dirBuf;
std::string splittext = msg.getText();
if(splittext.find(":") != splittext.npos)
{
fileName += splittext.substr(0, splittext.find(":")) + ".txt";
}
msgText = splittext.substr(splittext.find(":") + 1);
std::string u = Unicode::wideToNarrow(msg.getUnicodeAttach());
// If there is ANY Unicode, send the whole log as Unicode. If there is ONLY non-Unicode, then send the log non-Unicode.
if (!msg.getUnicodeAttach().empty())
{
Unicode::String text;
if (!msgText.empty())
{
text += Unicode::narrowToWide(msgText);
text += Unicode::narrowToWide(":");
}
text += msg.getUnicodeAttach().c_str();
text += Unicode::narrowToWide("\0");
m_loggingServerApi->Log16(fileName.c_str(), 0, text.c_str());
}
else if (!msgText.empty())
{
m_loggingServerApi->Log(fileName.c_str(), 0, "%s\0", msgText.c_str());
}
}
}
//-----------------------------------------------------------------------
void LoggingServerApiObserver::flush()
{
m_loggingServerApi->Flush(1000);
}
//-----------------------------------------------------------------------
void LoggingServerApiObserver::update()
{
if(m_loggingServerApi->GetStatus() == LoggingServerApi::cStatusDisconnected)
{
m_loggingServerApi->Connect(ConfigLogServer::getLoggingServerApiAddress(), LoggingServerApi::cDefaultPort, ConfigLogServer::getLoggingServerApiLoginName(), ConfigLogServer::getLoggingServerApiPassword(), ConfigLogServer::getLoggingServerApiDefaultDirectory());
}
m_loggingServerApi->GiveTime();
}
//-----------------------------------------------------------------------