diff --git a/lib/util.cpp b/lib/util.cpp index 7f50e2eb..8f322e63 100644 --- a/lib/util.cpp +++ b/lib/util.cpp @@ -247,7 +247,8 @@ namespace Util{ /// Parses log messages from the given file descriptor in, printing them to out, optionally calling the given callback for each valid message. /// Closes the file descriptor on read error - void logParser(int in, int out, bool colored, void callback(std::string, std::string, bool)){ + void logParser(int in, int out, bool colored, void callback(const std::string &, const std::string &, const std::string &, bool)){ + char buf[1024]; FILE *output = fdopen(in, "r"); char *color_time, *color_msg, *color_end, *color_strm, *CONF_msg, *FAIL_msg, *ERROR_msg, *WARN_msg, *INFO_msg; @@ -327,7 +328,7 @@ namespace Util{ buf[j] = 0; //print message if (message){ - if (callback){callback(kind, message, true);} + if (callback){callback(kind, message, strmNm, true);} color_msg = color_end; if (colored){ if (!strcmp(kind, "CONF")){color_msg = CONF_msg;} diff --git a/lib/util.h b/lib/util.h index 425896b1..4d49d7a2 100644 --- a/lib/util.h +++ b/lib/util.h @@ -39,7 +39,7 @@ namespace Util{ }; - void logParser(int in, int out, bool colored, void callback(std::string, std::string, bool) = 0); + void logParser(int in, int out, bool colored, void callback(const std::string &, const std::string &, const std::string &, bool) = 0); void redirectLogsIfNeeded(); /// Holds type, size and offset for RelAccX class internal data fields. diff --git a/src/controller/controller_storage.cpp b/src/controller/controller_storage.cpp index da08c33f..c171b960 100644 --- a/src/controller/controller_storage.cpp +++ b/src/controller/controller_storage.cpp @@ -48,7 +48,7 @@ namespace Controller { ///\brief Store and print a log message. ///\param kind The type of message. ///\param message The message to be logged. - void Log(std::string kind, std::string message, bool noWriteToLog){ + void Log(const std::string & kind, const std::string & message, const std::string & stream, bool noWriteToLog){ if (noWriteToLog){ tthread::lock_guard guard(logMutex); JSON::Value m; @@ -56,6 +56,7 @@ namespace Controller { m.append(logTime); m.append(kind); m.append(message); + m.append(stream); Storage["log"].append(m); Storage["log"].shrink(100); // limit to 100 log messages logCounter++; @@ -68,6 +69,7 @@ namespace Controller { rlxLogs->setInt("time", logTime, logCounter-1); rlxLogs->setString("kind", kind, logCounter-1); rlxLogs->setString("msg", message, logCounter-1); + rlxLogs->setString("strm", stream, logCounter-1); rlxLogs->setEndPos(logCounter); } }else{ @@ -118,6 +120,7 @@ namespace Controller { rlxLogs->addField("time", RAX_64UINT); rlxLogs->addField("kind", RAX_32STRING); rlxLogs->addField("msg", RAX_512STRING); + rlxLogs->addField("strm", RAX_128STRING); rlxLogs->setReady(); } maxLogsRecs = (1024*1024 - rlxLogs->getOffset()) / rlxLogs->getRSize(); diff --git a/src/controller/controller_storage.h b/src/controller/controller_storage.h index 9f50d7c3..beb3de73 100644 --- a/src/controller/controller_storage.h +++ b/src/controller/controller_storage.h @@ -21,7 +21,7 @@ namespace Controller { Util::RelAccX * streamsAccessor(); /// Store and print a log message. - void Log(std::string kind, std::string message, bool noWriteToLog = false); + void Log(const std::string & kind, const std::string & message, const std::string & stream = "", bool noWriteToLog = false); void logAccess(const std::string & sessId, const std::string & strm, const std::string & conn, const std::string & host, uint64_t duration, uint64_t up, uint64_t down, const std::string & tags); /// Write contents to Filename.