From 7ac5dbf1a0489e628935a85e3c5be94e84868153 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Sun, 8 Jun 2014 14:57:16 -0400 Subject: [PATCH] Added logging library that functions in foreground and background (logs to file) --- src/CMakeLists.txt | 1 + src/daemon.cpp | 64 +++++++++++++++++++++++++++++----------------- 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 228cc38..72ffbf3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -78,6 +78,7 @@ TARGET_LINK_LIBRARIES(alprd support uuid curl + log4cplus ${OpenCV_LIBS} ${Tesseract_LIBS} ) diff --git a/src/daemon.cpp b/src/daemon.cpp index c1bb8b9..1361ff0 100644 --- a/src/daemon.cpp +++ b/src/daemon.cpp @@ -12,6 +12,11 @@ #include "uuid.h" #include +#include +#include +#include +#include +#include // prototypes void streamRecognitionThread(void* arg); @@ -45,6 +50,8 @@ struct UploadThreadData bool daemon_active; +static log4cplus::Logger logger; + int main( int argc, const char** argv ) { daemon_active = true; @@ -91,22 +98,33 @@ int main( int argc, const char** argv ) return 1; } + log4cplus::BasicConfigurator config; + config.configure(); + if (noDaemon == false) { // Fork off into a separate daemon daemon(0, 0); + + log4cplus::SharedAppenderPtr myAppender(new log4cplus::FileAppender(logFile)); + myAppender->setName("alprd_appender"); // 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 { - 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; @@ -132,7 +150,7 @@ int main( int argc, const char** argv ) 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; } @@ -140,7 +158,7 @@ int main( int argc, const char** argv ) std::string upload_url = ini.GetValue("daemon", "upload_address", ""); 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++) { @@ -172,8 +190,8 @@ void streamRecognitionThread(void* arg) { CaptureThreadData* tdata = (CaptureThreadData*) arg; - std::cout << "country: " << tdata->country_code << " -- config file: " << tdata->config_file << std::endl; - std::cout << "Stream " << tdata->camera_id << ": " << tdata->stream_url << std::endl; + LOG4CPLUS_INFO(logger, "country: " << tdata->country_code << " -- config file: " << tdata->config_file ); + LOG4CPLUS_INFO(logger, "Stream " << tdata->camera_id << ": " << tdata->stream_url); Alpr alpr(tdata->country_code, tdata->config_file); @@ -188,7 +206,7 @@ void streamRecognitionThread(void* arg) std::vector buffer; - std::cout << "Daemon active: " << daemon_active << std::endl; + LOG4CPLUS_INFO(logger, "Daemon active: " << daemon_active); while (daemon_active) { @@ -244,7 +262,7 @@ void streamRecognitionThread(void* arg) videoBuffer.disconnect(); - std::cout << "Video processing ended" << std::endl; + LOG4CPLUS_INFO(logger, "Video processing ended"); delete tdata; } @@ -253,17 +271,17 @@ void streamRecognitionThread(void* arg) bool writeToQueue(std::string jsonResult) { - Beanstalk::Client client(BEANSTALK_QUEUE_HOST, BEANSTALK_PORT); - client.use(BEANSTALK_TUBE_NAME); + Beanstalk::Client client(BEANSTALK_QUEUE_HOST, BEANSTALK_PORT); + client.use(BEANSTALK_TUBE_NAME); - int id = client.put(jsonResult); - - if (id <= 0) - return false; - - std::cout << "put job id: " << id << std::endl; + int id = client.put(jsonResult); + + if (id <= 0) + return false; + + LOG4CPLUS_INFO(logger, "put job id: " << id ); - return true; + return true; } @@ -290,16 +308,16 @@ void dataUploadThread(void* arg) if (job.id() > 0) { - //std::cout << job.body() << std::endl; + LOG4CPLUS_DEBUG(logger, job.body() ); if (uploadPost(udata->upload_url, job.body())) { client.del(job.id()); - std::cout << "Job: " << job.id() << " successfully uploaded" << std::endl; + LOG4CPLUS_INFO(logger, "Job: " << job.id() << " successfully uploaded" ); } else { 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." ); } }