mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-10-13 03:13:11 -04:00
LogServer
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
// 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();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user