runMACS
 All Data Structures Files Functions Variables Enumerations Enumerator Macros
RocLogger.cpp
Go to the documentation of this file.
1 #include <RocLogger.h>
2 
3 #include <cstring>
4 
5 using namespace std;
6 
7 RocLogger::RocLogger(zmq::context_t & _ctx,
8  const std::string & _endpoint,
9  const std::string & _node,
10  const std::string & _source):
11  node(_node), source(_source) {
12  int linger = 100;
13  unique_lock<mutex> _(socketMutex);
14  socket = new zmq::socket_t(_ctx, ZMQ_PUB);
15  socket->setsockopt(ZMQ_LINGER, &linger, sizeof(linger));
16  socket->connect(_endpoint.c_str());
17 }
18 
20  unique_lock<mutex> _(socketMutex);
21  delete socket;
22 }
23 
24 void RocLogger::debug(const std::string & _msg) {
25  sendMessage('D', _msg);
26 }
27 
28 void RocLogger::info(const std::string & _msg) {
29  sendMessage('I', _msg);
30 }
31 
32 void RocLogger::warning(const std::string & _msg) {
33  sendMessage('W', _msg);
34 }
35 
36 void RocLogger::error(const std::string & _msg) {
37  sendMessage('E', _msg);
38 }
39 
40 void RocLogger::critical(const std::string & _msg) {
41  sendMessage('C', _msg);
42 }
43 
44 
45 void RocLogger::sendMessage(char code, const std::string & _msg) {
46  zmq::message_t header(6 + node.length());
47  memcpy(((char*)header.data()) + 0, "ROCL\x01", 5);
48  ((char*)header.data())[5] = code;
49  memcpy(((char*)header.data()) + 6, node.c_str(), node.length());
50  zmq::message_t sourceMsg(source.length());
51  memcpy(sourceMsg.data(), source.c_str(), source.length());
52  zmq::message_t data(_msg.length());
53  memcpy(data.data(), _msg.c_str(), _msg.length());
54  unique_lock<mutex> _(socketMutex); /* not ideal, but simplifies multithreaded logging a lot */
55  socket->send(header, ZMQ_SNDMORE);
56  socket->send(sourceMsg, ZMQ_SNDMORE);
57  socket->send(data);
58 }
void error(const std::string &_msg)
Definition: RocLogger.cpp:36
STL namespace.
void debug(const std::string &_msg)
Definition: RocLogger.cpp:24
RocLogger(zmq::context_t &_ctx, const std::string &_endpoint, const std::string &_node, const std::string &_source)
Definition: RocLogger.cpp:7
void critical(const std::string &_msg)
Definition: RocLogger.cpp:40
void warning(const std::string &_msg)
Definition: RocLogger.cpp:32
void info(const std::string &_msg)
Definition: RocLogger.cpp:28