Improved logging, fixed minor bug.
This commit is contained in:
parent
145751c953
commit
7e9ecdb099
|
@ -18,15 +18,85 @@
|
|||
*/
|
||||
|
||||
#include "logging.h"
|
||||
#include <fstream>
|
||||
#include <ostream>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
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)
|
||||
{
|
||||
logfile << time (NULL) << ": (" << ((char)lvl) << "): ";
|
||||
logfile << msg << "\n";
|
||||
const char letters[] = "EWID";
|
||||
if (lvl <= this->loglevel)
|
||||
{
|
||||
(*logfile) << time (NULL) << ": ("
|
||||
<< ((char)letters[lvl]) << "): "
|
||||
<< msg << "\n";
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -32,17 +32,25 @@ namespace UDPT {
|
|||
|
||||
public:
|
||||
enum LogLevel {
|
||||
LL_ERROR = 'E',
|
||||
LL_WARNING = 'W',
|
||||
LL_INFO = 'I',
|
||||
LL_DEBUG = 'D'
|
||||
LL_ERROR = 0,
|
||||
LL_WARNING = 1,
|
||||
LL_INFO = 2,
|
||||
LL_DEBUG = 3
|
||||
};
|
||||
|
||||
Logger (Settings *s);
|
||||
|
||||
Logger (Settings *s, ostream &os);
|
||||
|
||||
virtual ~Logger ();
|
||||
|
||||
void log (enum LogLevel, string msg);
|
||||
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/webapp.hpp"
|
||||
#include <cstdlib> // atoi
|
||||
#include <csignal> // signal
|
||||
|
||||
using namespace std;
|
||||
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;
|
||||
}
|
||||
|
||||
logger = new Logger (settings, cout);
|
||||
logger = new Logger (settings);
|
||||
usi = new UDPTracker (settings);
|
||||
|
||||
HTTPServer *apiSrv = NULL;
|
||||
|
|
|
@ -354,6 +354,7 @@ void _settings_clean_string (char **str)
|
|||
{
|
||||
string addr = v.substr(s, (e - s) + 1);
|
||||
SOCKADDR_IN saddr;
|
||||
memset(&saddr, 0, sizeof (SOCKADDR_IN));
|
||||
saddr.sin_family = AF_INET;
|
||||
saddr.sin_addr.s_addr = 0L;
|
||||
saddr.sin_port = (6969);
|
||||
|
|
|
@ -110,6 +110,7 @@ namespace UDPT
|
|||
|
||||
enum UDPTracker::StartStatus UDPTracker::start ()
|
||||
{
|
||||
stringstream ss;
|
||||
SOCKET sock;
|
||||
int r, // saves results
|
||||
i, // loop index
|
||||
|
@ -123,6 +124,7 @@ namespace UDPT
|
|||
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));
|
||||
|
||||
if (r == SOCKET_ERROR)
|
||||
|
@ -142,7 +144,7 @@ namespace UDPT
|
|||
|
||||
this->isRunning = true;
|
||||
|
||||
stringstream ss;
|
||||
ss.clear();
|
||||
ss << "Starting maintenance thread (1/" << ((int)this->thread_count) << ")";
|
||||
logger->log(Logger::LL_INFO, ss.str());
|
||||
|
||||
|
@ -155,10 +157,9 @@ namespace UDPT
|
|||
|
||||
for (i = 1;i < this->thread_count; i++)
|
||||
{
|
||||
stringstream ss;
|
||||
ss.clear();
|
||||
ss << "Starting thread (" << (i + 1) << "/" << ((int)this->thread_count) << ")";
|
||||
logger->log(Logger::LL_INFO, ss.str());
|
||||
ss.clear();
|
||||
|
||||
#ifdef WIN32
|
||||
this->threads[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)_thread_start, (LPVOID)this, 0, NULL);
|
||||
|
|
Loading…
Reference in a new issue