39 #include <log4cxx/helpers/stringhelper.h>
40 #include <log4cxx/helpers/pool.h>
41 #include <log4cxx/spi/location/locationinfo.h>
42 #include <log4cxx/helpers/loglog.h>
50 namespace pexExceptions = lsst::pex::exceptions;
52 using namespace log4cxx;
53 using namespace log4cxx::helpers;
55 namespace ctrlEvents = lsst::ctrl::events;
71 EventAppender::~EventAppender() {
72 if (_transmitter != NULL)
77 void EventAppender::setOption(
const LogString& option,
const LogString& value) {
78 if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR(
"BROKER"), LOG4CXX_STR(
"broker"))) {
80 }
else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR(
"PORT"), LOG4CXX_STR(
"port"))) {
81 _port = atoi(value.c_str());
82 }
else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR(
"TOPIC"), LOG4CXX_STR(
"topic"))) {
85 AppenderSkeleton::setOption(option, value);
89 void EventAppender::activateOptions(Pool&)
91 if (_broker.empty()) {
92 LogLog::error((LogString) LOG4CXX_STR(
"Appender requires broker option to be specified"));
97 }
catch (pexExceptions::RuntimeError& rte) {
98 std::ostringstream msg;
99 msg <<
"Couldn't reach broker " << _broker <<
" at port " << _port;
107 if (_transmitter == NULL) {
110 }
catch (Exception& e) {
117 void EventAppender::append(
const spi::LoggingEventPtr& event, helpers::Pool& p) {
120 psp->set(
"logger", event->getLoggerName());
121 psp->set(
"message", event->getMessage());
122 psp->set(
"timestamp", event->getTimeStamp());
123 psp->set(
"threadname", event->getThreadName());
124 psp->set(
"level", event->getLevel()->toInt());
126 spi::LocationInfo location =
event->getLocationInformation();
129 loc->set(
"filename", location.getFileName());
130 loc->set(
"classname", location.getClassName());
131 loc->set(
"methodname", location.getMethodName());
132 loc->set(
"linenumber", location.getLineNumber());
134 psp->set(
"location", loc);
140 if (_transmitter == NULL)
145 }
catch (Exception& e) {
146 LogLog::error((LogString) LOG4CXX_STR(
"event transmitter failed"));
152 void EventAppender::close() {
defines the EventAppender class
#define LSST_IMPLEMENT_LOG4CXX_OBJECT(object)
static const int DEFAULTHOSTPORT
void publishEvent(Event &event)
Publish an Event to this object's topic.
Transmit events to the event bus.
information about the Event Broker
Representation of an LSST Event.
Class for storing generic metadata.
log4cxx appender class which sends logging messages out on the event stream
boost::shared_ptr< PropertySet > Ptr
static const std::string LOGGING_TOPIC
defines the EventSystem class
Include files required for standard LSST Exception handling.