Added logging library that functions in foreground and background (logs to file)

This commit is contained in:
Matt Hill
2014-06-08 14:57:16 -04:00
parent 19c87c1150
commit 7ac5dbf1a0
2 changed files with 42 additions and 23 deletions

View File

@@ -78,6 +78,7 @@ TARGET_LINK_LIBRARIES(alprd
support support
uuid uuid
curl curl
log4cplus
${OpenCV_LIBS} ${OpenCV_LIBS}
${Tesseract_LIBS} ${Tesseract_LIBS}
) )

View File

@@ -12,6 +12,11 @@
#include "uuid.h" #include "uuid.h"
#include <curl/curl.h> #include <curl/curl.h>
#include <log4cplus/logger.h>
#include <log4cplus/loggingmacros.h>
#include <log4cplus/configurator.h>
#include <log4cplus/consoleappender.h>
#include <log4cplus/fileappender.h>
// prototypes // prototypes
void streamRecognitionThread(void* arg); void streamRecognitionThread(void* arg);
@@ -45,6 +50,8 @@ struct UploadThreadData
bool daemon_active; bool daemon_active;
static log4cplus::Logger logger;
int main( int argc, const char** argv ) int main( int argc, const char** argv )
{ {
daemon_active = true; daemon_active = true;
@@ -91,22 +98,33 @@ int main( int argc, const char** argv )
return 1; return 1;
} }
log4cplus::BasicConfigurator config;
config.configure();
if (noDaemon == false) if (noDaemon == false)
{ {
// Fork off into a separate daemon // Fork off into a separate daemon
daemon(0, 0); daemon(0, 0);
log4cplus::SharedAppenderPtr myAppender(new log4cplus::FileAppender(logFile));
myAppender->setName("alprd_appender");
// Redirect std out to log file // Redirect std out to log file
logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("alprd"));
logger.addAppender(myAppender);
std::ofstream out(logFile.c_str());
std::cout.rdbuf(out.rdbuf());
std::cerr.rdbuf(out.rdbuf());
std::cout << "Running OpenALPR daemon in daemon mode." << std::endl; LOG4CPLUS_INFO(logger, "Running OpenALPR daemon in daemon mode.");
} }
else else
{ {
std::cout << "Running OpenALPR daemon in the foreground" << std::endl; //log4cplus::SharedAppenderPtr myAppender(new log4cplus::ConsoleAppender());
//myAppender->setName("alprd_appender");
// Redirect std out to log file
logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("alprd"));
//logger.addAppender(myAppender);
LOG4CPLUS_INFO(logger, "Running OpenALPR daemon in the foreground.");
} }
CSimpleIniA ini; CSimpleIniA ini;
@@ -132,7 +150,7 @@ int main( int argc, const char** argv )
if (stream_urls.size() == 0) if (stream_urls.size() == 0)
{ {
std::cout << "No video streams defined in the configuration" << std::endl; LOG4CPLUS_FATAL(logger, "No video streams defined in the configuration.");
return 1; return 1;
} }
@@ -140,7 +158,7 @@ int main( int argc, const char** argv )
std::string upload_url = ini.GetValue("daemon", "upload_address", ""); std::string upload_url = ini.GetValue("daemon", "upload_address", "");
std::string site_id = ini.GetValue("daemon", "site_id", ""); std::string site_id = ini.GetValue("daemon", "site_id", "");
std::cout << "Using: " << imageFolder << " for storing valid plate images" << std::endl; LOG4CPLUS_INFO(logger, "Using: " << imageFolder << " for storing valid plate images");
for (int i = 0; i < stream_urls.size(); i++) for (int i = 0; i < stream_urls.size(); i++)
{ {
@@ -172,8 +190,8 @@ void streamRecognitionThread(void* arg)
{ {
CaptureThreadData* tdata = (CaptureThreadData*) arg; CaptureThreadData* tdata = (CaptureThreadData*) arg;
std::cout << "country: " << tdata->country_code << " -- config file: " << tdata->config_file << std::endl; LOG4CPLUS_INFO(logger, "country: " << tdata->country_code << " -- config file: " << tdata->config_file );
std::cout << "Stream " << tdata->camera_id << ": " << tdata->stream_url << std::endl; LOG4CPLUS_INFO(logger, "Stream " << tdata->camera_id << ": " << tdata->stream_url);
Alpr alpr(tdata->country_code, tdata->config_file); Alpr alpr(tdata->country_code, tdata->config_file);
@@ -188,7 +206,7 @@ void streamRecognitionThread(void* arg)
std::vector<uchar> buffer; std::vector<uchar> buffer;
std::cout << "Daemon active: " << daemon_active << std::endl; LOG4CPLUS_INFO(logger, "Daemon active: " << daemon_active);
while (daemon_active) while (daemon_active)
{ {
@@ -244,7 +262,7 @@ void streamRecognitionThread(void* arg)
videoBuffer.disconnect(); videoBuffer.disconnect();
std::cout << "Video processing ended" << std::endl; LOG4CPLUS_INFO(logger, "Video processing ended");
delete tdata; delete tdata;
} }
@@ -261,7 +279,7 @@ bool writeToQueue(std::string jsonResult)
if (id <= 0) if (id <= 0)
return false; return false;
std::cout << "put job id: " << id << std::endl; LOG4CPLUS_INFO(logger, "put job id: " << id );
return true; return true;
} }
@@ -290,16 +308,16 @@ void dataUploadThread(void* arg)
if (job.id() > 0) if (job.id() > 0)
{ {
//std::cout << job.body() << std::endl; LOG4CPLUS_DEBUG(logger, job.body() );
if (uploadPost(udata->upload_url, job.body())) if (uploadPost(udata->upload_url, job.body()))
{ {
client.del(job.id()); client.del(job.id());
std::cout << "Job: " << job.id() << " successfully uploaded" << std::endl; LOG4CPLUS_INFO(logger, "Job: " << job.id() << " successfully uploaded" );
} }
else else
{ {
client.release(job); client.release(job);
std::cout << "Job: " << job.id() << " failed to upload. Will retry." << std::endl; LOG4CPLUS_WARN(logger, "Job: " << job.id() << " failed to upload. Will retry." );
} }
} }