void RH_LogEventAppender::append(const spi::LoggingEventPtr& event, Pool& p){
  if ( this->layout == NULL ) {
    LOG4CXX_ENCODE_CHAR(nameStr, name);
    std::string msg("No Layout set for the appender named [ ");
    msg.append(nameStr);
    msg.append(" ].");
	 
    LOG4CXX_DECODE_CHAR(msgL, msg);
    errorHandler->error(msgL);
    return;
  }
	 
  log4cxx::LogString fMsg;
	 
  this->layout->format(fMsg, event, p);
	 
  LOG4CXX_ENCODE_CHAR(fMsgStr, fMsg);

  // This is the message structure for a Redhawk logging event
  CF::LogEvent rh_event;
  LOG4CXX_ENCODE_CHAR(t1,prodId);
  rh_event.producerId = CORBA::string_dup(t1.c_str());
  LOG4CXX_ENCODE_CHAR(t2,prodName);
  rh_event.producerName = CORBA::string_dup(t2.c_str());
  LOG4CXX_ENCODE_CHAR(t3,prodFQN);
  rh_event.producerName_fqn = CORBA::string_dup(t3.c_str());

  CORBA::Long level=CF::LogLevels::FATAL;
  if ( event->getLevel() == log4cxx::Level::getError() )
    level=CF::LogLevels::ERROR;
  if ( event->getLevel() == log4cxx::Level::getWarn() )
    level=CF::LogLevels::WARN;
  if ( event->getLevel() == log4cxx::Level::getInfo() )
    level=CF::LogLevels::INFO;
  if ( event->getLevel() == log4cxx::Level::getDebug() )
    level=CF::LogLevels::DEBUG;
  if ( event->getLevel() == log4cxx::Level::getTrace() )
    level=CF::LogLevels::TRACE;
  if ( event->getLevel() == log4cxx::Level::getAll() )
    level=CF::LogLevels::ALL;
  rh_event.level = level;

  //timeStamp in LoggingEventPtr is in microseconds
  //need to convert to seconds for rh_event
  rh_event.timeStamp = event->getTimeStamp()/1000000;
  rh_event.msg = CORBA::string_dup(fMsg.c_str());
  
  // push log message to the event channel
  if ( _event_channel ) {
    if ( _event_channel->push(rh_event) != 0 ) {
      _LL_DEBUG( "RH_LogEventAppender::append EVENT CHANNEL, PUSH OPERATION FAILED.");
    }
 }
  
}
Ejemplo n.º 2
0
void XMLLayout::format(LogString& output,
     const spi::LoggingEventPtr& event,
     Pool& p) const
{
        output.append(LOG4CXX_STR("<log4j:event logger=\""));
        Transform::appendEscapingTags(output, event->getLoggerName());
        output.append(LOG4CXX_STR("\" timestamp=\""));
        StringHelper::toString(event->getTimeStamp()/1000L, p, output);
        output.append(LOG4CXX_STR("\" level=\""));
        Transform::appendEscapingTags(output, event->getLevel()->toString());
        output.append(LOG4CXX_STR("\" thread=\""));
        Transform::appendEscapingTags(output, event->getThreadName());
        output.append(LOG4CXX_STR("\">"));
        output.append(LOG4CXX_EOL);

        output.append(LOG4CXX_STR("<log4j:message><![CDATA["));
        // Append the rendered message. Also make sure to escape any
        // existing CDATA sections.
        Transform::appendEscapingCDATA(output, event->getRenderedMessage());
        output.append(LOG4CXX_STR("]]></log4j:message>"));
        output.append(LOG4CXX_EOL);

        LogString ndc;
        if(event->getNDC(ndc)) {
                output.append(LOG4CXX_STR("<log4j:NDC><![CDATA["));
                Transform::appendEscapingCDATA(output, ndc);
                output.append(LOG4CXX_STR("]]></log4j:NDC>"));
                output.append(LOG4CXX_EOL);
        }

        if(locationInfo)
        {
                output.append(LOG4CXX_STR("<log4j:locationInfo class=\""));
                const LocationInfo& locInfo = event->getLocationInformation();
                LOG4CXX_DECODE_CHAR(className, locInfo.getClassName());
                Transform::appendEscapingTags(output, className);
                output.append(LOG4CXX_STR("\" method=\""));
                LOG4CXX_DECODE_CHAR(method, locInfo.getMethodName());
                Transform::appendEscapingTags(output, method);
                output.append(LOG4CXX_STR("\" file=\""));
                LOG4CXX_DECODE_CHAR(fileName, locInfo.getFileName());
                Transform::appendEscapingTags(output, fileName);
                output.append(LOG4CXX_STR("\" line=\""));
                StringHelper::toString(locInfo.getLineNumber(), p, output);
                output.append(LOG4CXX_STR("\"/>"));
                output.append(LOG4CXX_EOL);
        }
        
        if (properties) {
            KeySet propertySet(event->getPropertyKeySet());
            KeySet keySet(event->getMDCKeySet());
            if (!(keySet.empty() && propertySet.empty())) {
                output.append(LOG4CXX_STR("<log4j:properties>"));
                output.append(LOG4CXX_EOL);
                for (KeySet::const_iterator i = keySet.begin();
                        i != keySet.end(); 
                        i++) {
                        LogString key(*i);
                        LogString value;
                        if(event->getMDC(key, value)) {
                            output.append(LOG4CXX_STR("<log4j:data name=\""));
                            Transform::appendEscapingTags(output, key);
                            output.append(LOG4CXX_STR("\" value=\""));
                            Transform::appendEscapingTags(output, value);
                            output.append(LOG4CXX_STR("\"/>"));
                            output.append(LOG4CXX_EOL);
                        }
                }
            for (KeySet::const_iterator i2 = propertySet.begin();
                        i2 != propertySet.end(); 
                        i2++) {
                        LogString key(*i2);
                        LogString value;
                        if(event->getProperty(key, value)) {
                            output.append(LOG4CXX_STR("<log4j:data name=\""));
                            Transform::appendEscapingTags(output, key);
                            output.append(LOG4CXX_STR("\" value=\""));
                            Transform::appendEscapingTags(output, value);
                            output.append(LOG4CXX_STR("\"/>"));
                            output.append(LOG4CXX_EOL);
                        }
                }
                output.append(LOG4CXX_STR("</log4j:properties>"));
                output.append(LOG4CXX_EOL);
            }
        }

        output.append(LOG4CXX_STR("</log4j:event>"));
        output.append(LOG4CXX_EOL);
        output.append(LOG4CXX_EOL);        
}