Improved logging, fixed minor bug.
This commit is contained in:
parent
145751c953
commit
7e9ecdb099
|
@ -18,15 +18,85 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "logging.h"
|
#include "logging.h"
|
||||||
|
#include <fstream>
|
||||||
|
#include <ostream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
namespace UDPT {
|
namespace UDPT {
|
||||||
Logger::Logger(Settings *s, ostream &os) : logfile (os)
|
|
||||||
|
Logger::Logger(Settings *s)
|
||||||
|
: logfile (&std::cout)
|
||||||
{
|
{
|
||||||
|
Settings::SettingClass *sc;
|
||||||
|
string filename = "stdout";
|
||||||
|
string level = "error";
|
||||||
|
|
||||||
|
closeStreamOnDestroy = false;
|
||||||
|
|
||||||
|
sc = s->getClass("logging");
|
||||||
|
if (sc != NULL)
|
||||||
|
{
|
||||||
|
string::size_type i;
|
||||||
|
|
||||||
|
filename = sc->get("filename");
|
||||||
|
level = sc->get("level");
|
||||||
|
|
||||||
|
for (i = 0;i < level.length(); i++)
|
||||||
|
{
|
||||||
|
if (level[i] >= 'A' && level[i] <= 'Z')
|
||||||
|
level[i] = 'a' + (level[i] - 'A');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (level == "debug" || level == "d")
|
||||||
|
this->loglevel = LL_DEBUG;
|
||||||
|
else if (level == "warning" || level == "w")
|
||||||
|
this->loglevel = LL_WARNING;
|
||||||
|
else if (level == "info" || level == "i")
|
||||||
|
this->loglevel = LL_INFO;
|
||||||
|
else
|
||||||
|
this->loglevel = LL_ERROR;
|
||||||
|
|
||||||
|
if (filename.compare("stdout") != 0 && filename.length() > 0)
|
||||||
|
{
|
||||||
|
fstream fs;
|
||||||
|
fs.open(filename.c_str(), ios::binary | ios::out | ios::app);
|
||||||
|
if (!fs.is_open())
|
||||||
|
{
|
||||||
|
this->log(LL_ERROR, "Failed to open log file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this->logfile = &fs;
|
||||||
|
closeStreamOnDestroy = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger::Logger(Settings *s, ostream &os)
|
||||||
|
: logfile (&os), loglevel (LL_ERROR)
|
||||||
|
{
|
||||||
|
closeStreamOnDestroy = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger::~Logger()
|
||||||
|
{
|
||||||
|
fstream *f = (fstream*)this->logfile;
|
||||||
|
f->flush();
|
||||||
|
if (closeStreamOnDestroy)
|
||||||
|
{
|
||||||
|
f->close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Logger::log(enum LogLevel lvl, string msg)
|
void Logger::log(enum LogLevel lvl, string msg)
|
||||||
{
|
{
|
||||||
logfile << time (NULL) << ": (" << ((char)lvl) << "): ";
|
const char letters[] = "EWID";
|
||||||
logfile << msg << "\n";
|
if (lvl <= this->loglevel)
|
||||||
|
{
|
||||||
|
(*logfile) << time (NULL) << ": ("
|
||||||
|
<< ((char)letters[lvl]) << "): "
|
||||||
|
<< msg << "\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -32,17 +32,25 @@ namespace UDPT {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum LogLevel {
|
enum LogLevel {
|
||||||
LL_ERROR = 'E',
|
LL_ERROR = 0,
|
||||||
LL_WARNING = 'W',
|
LL_WARNING = 1,
|
||||||
LL_INFO = 'I',
|
LL_INFO = 2,
|
||||||
LL_DEBUG = 'D'
|
LL_DEBUG = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Logger (Settings *s);
|
||||||
|
|
||||||
Logger (Settings *s, ostream &os);
|
Logger (Settings *s, ostream &os);
|
||||||
|
|
||||||
|
virtual ~Logger ();
|
||||||
|
|
||||||
void log (enum LogLevel, string msg);
|
void log (enum LogLevel, string msg);
|
||||||
private:
|
private:
|
||||||
ostream &logfile;
|
ostream *logfile;
|
||||||
|
enum LogLevel loglevel;
|
||||||
|
bool closeStreamOnDestroy;
|
||||||
|
|
||||||
|
static void setStream (Logger *logger, ostream &s);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "http/httpserver.hpp"
|
#include "http/httpserver.hpp"
|
||||||
#include "http/webapp.hpp"
|
#include "http/webapp.hpp"
|
||||||
#include <cstdlib> // atoi
|
#include <cstdlib> // atoi
|
||||||
|
#include <csignal> // signal
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace UDPT;
|
using namespace UDPT;
|
||||||
|
@ -171,7 +172,7 @@ int main(int argc, char *argv[])
|
||||||
cerr << "Failed to read from '" << config_file.c_str() << "'. Using default settings." << endl;
|
cerr << "Failed to read from '" << config_file.c_str() << "'. Using default settings." << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
logger = new Logger (settings, cout);
|
logger = new Logger (settings);
|
||||||
usi = new UDPTracker (settings);
|
usi = new UDPTracker (settings);
|
||||||
|
|
||||||
HTTPServer *apiSrv = NULL;
|
HTTPServer *apiSrv = NULL;
|
||||||
|
|
|
@ -354,6 +354,7 @@ void _settings_clean_string (char **str)
|
||||||
{
|
{
|
||||||
string addr = v.substr(s, (e - s) + 1);
|
string addr = v.substr(s, (e - s) + 1);
|
||||||
SOCKADDR_IN saddr;
|
SOCKADDR_IN saddr;
|
||||||
|
memset(&saddr, 0, sizeof (SOCKADDR_IN));
|
||||||
saddr.sin_family = AF_INET;
|
saddr.sin_family = AF_INET;
|
||||||
saddr.sin_addr.s_addr = 0L;
|
saddr.sin_addr.s_addr = 0L;
|
||||||
saddr.sin_port = (6969);
|
saddr.sin_port = (6969);
|
||||||
|
|
|
@ -110,6 +110,7 @@ namespace UDPT
|
||||||
|
|
||||||
enum UDPTracker::StartStatus UDPTracker::start ()
|
enum UDPTracker::StartStatus UDPTracker::start ()
|
||||||
{
|
{
|
||||||
|
stringstream ss;
|
||||||
SOCKET sock;
|
SOCKET sock;
|
||||||
int r, // saves results
|
int r, // saves results
|
||||||
i, // loop index
|
i, // loop index
|
||||||
|
@ -123,6 +124,7 @@ namespace UDPT
|
||||||
yup = 1;
|
yup = 1;
|
||||||
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const char*)&yup, 1);
|
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const char*)&yup, 1);
|
||||||
|
|
||||||
|
this->localEndpoint.sin_family = AF_INET;
|
||||||
r = bind (sock, (SOCKADDR*)&this->localEndpoint, sizeof(SOCKADDR_IN));
|
r = bind (sock, (SOCKADDR*)&this->localEndpoint, sizeof(SOCKADDR_IN));
|
||||||
|
|
||||||
if (r == SOCKET_ERROR)
|
if (r == SOCKET_ERROR)
|
||||||
|
@ -142,7 +144,7 @@ namespace UDPT
|
||||||
|
|
||||||
this->isRunning = true;
|
this->isRunning = true;
|
||||||
|
|
||||||
stringstream ss;
|
ss.clear();
|
||||||
ss << "Starting maintenance thread (1/" << ((int)this->thread_count) << ")";
|
ss << "Starting maintenance thread (1/" << ((int)this->thread_count) << ")";
|
||||||
logger->log(Logger::LL_INFO, ss.str());
|
logger->log(Logger::LL_INFO, ss.str());
|
||||||
|
|
||||||
|
@ -155,10 +157,9 @@ namespace UDPT
|
||||||
|
|
||||||
for (i = 1;i < this->thread_count; i++)
|
for (i = 1;i < this->thread_count; i++)
|
||||||
{
|
{
|
||||||
stringstream ss;
|
ss.clear();
|
||||||
ss << "Starting thread (" << (i + 1) << "/" << ((int)this->thread_count) << ")";
|
ss << "Starting thread (" << (i + 1) << "/" << ((int)this->thread_count) << ")";
|
||||||
logger->log(Logger::LL_INFO, ss.str());
|
logger->log(Logger::LL_INFO, ss.str());
|
||||||
ss.clear();
|
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
this->threads[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)_thread_start, (LPVOID)this, 0, NULL);
|
this->threads[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)_thread_start, (LPVOID)this, 0, NULL);
|
||||||
|
|
Loading…
Reference in a new issue