1 #include "daq/slc/readout/LogListener.h"
3 #include "daq/slc/readout/ProcessController.h"
5 #include <daq/slc/runcontrol/RCCallback.h>
6 #include <daq/slc/runcontrol/RCCommand.h>
7 #include <daq/slc/nsm/NSMCommunicator.h>
9 #include <daq/slc/system/File.h>
10 #include <daq/slc/system/FileReader.h>
12 #include <daq/slc/base/IOException.h>
13 #include <daq/slc/base/StringUtil.h>
14 #include <daq/slc/system/LogFile.h>
33 void LogListener::run()
40 LogFile::Priority priority = LogFile::UNKNOWN;
44 c = preader.readChar();
46 if (c !=
'\n' && iscntrl(c))
continue;
48 if (c ==
'\n' && count > 0) {
49 std::string assembledLogMessage(ss.str());
55 if (m_enableUnescapeNewlines) {
56 assembledLogMessage = StringUtil::replace(assembledLogMessage,
"\\n",
"\n");
59 s = m_con->getParName() +
" : " + assembledLogMessage;
62 if (priority == LogFile::UNKNOWN) {
63 priority = LogFile::DEBUG;
66 if (priority > LogFile::DEBUG) {
67 m_con->getCallback()->log(priority, s);
72 if (m_con->getCallback()->getNode().getState() == RCState::RUNNING_S) {
73 if (priority == LogFile::ERROR) {
75 }
else if (priority == LogFile::FATAL) {
77 m_con->getCallback()->setState(RCState::ERROR_ES);
82 priority = LogFile::UNKNOWN;
83 }
else if (isprint(c)) {
84 if (count == 0 && c ==
'[') {
87 c = preader.readChar();
91 if (s ==
"[DEBUG]") priority = LogFile::DEBUG;
92 else if (s ==
"[INFO]") priority = LogFile::INFO;
93 else if (s ==
"[NOTICE]") priority = LogFile::NOTICE;
94 else if (s ==
"[WARNING]") priority = LogFile::WARNING;
95 else if (s ==
"[ERROR]") priority = LogFile::ERROR;
96 else if (s ==
"[FATAL]") priority = LogFile::FATAL;
97 else if (s.find(
"STOP") != std::string::npos) {
98 StringList sl = StringUtil::split(s,
'=');
100 std::string nodename = StringUtil::replace(sl[1],
"]",
"");
103 }
catch (
const std::exception& e) {
114 priority = LogFile::DEBUG;
121 if (c !=
' ' || count > 0) {
129 LogFile::debug(
e.what());
131 s = m_con->getParName() +
" : " + ss.str();
134 if (priority == LogFile::UNKNOWN) {
135 priority = LogFile::DEBUG;
137 m_con->getCallback()->log(priority, s);
138 if (m_con->getCallback()->getNode().getState() == RCState::RUNNING_S) {
139 if (priority == LogFile::ERROR) {
141 }
else if (priority == LogFile::FATAL) {
143 m_con->getCallback()->setState(RCState::ERROR_ES);