void RemoteSyslogAppender::_append(const LoggingEvent& event) {
        const std::string message(_getLayout().format(event));
        size_t messageLength = message.length();
        char *buf = new char [messageLength + 16];
        int priority = _facility + toSyslogPriority(event.priority);
        int preambleLength = sprintf (buf, "<%d>", priority);
        memcpy (buf + preambleLength, message.data(), messageLength);

        sockaddr_in sain;
        sain.sin_family = AF_INET;
        sain.sin_port   = htons (_portNumber);
        // NO, do NOT use htonl on _ipAddr. Is already in network order.
        sain.sin_addr.s_addr = _ipAddr;

        while (messageLength > 0) {
            /* if packet larger than maximum (900 bytes), split
               into two or more syslog packets. */
            if (preambleLength + messageLength > 900) {
                sendto (_socket, buf, 900, 0, (struct sockaddr *) &sain, sizeof (sain));
                messageLength -= (900 - preambleLength);
                std::memmove (buf + preambleLength, buf + 900, messageLength);
                // note: we might need to sleep a bit here
            } else {
                sendto (_socket, buf, preambleLength + messageLength, 0, (struct sockaddr *) &sain, sizeof (sain));
                break;
            }
        }

        delete[] buf;
    }
Beispiel #2
0
 void FileAppender::_append(const LoggingEvent& event) {
     std::string message(_getLayout().format(event));
     if (_fd == -1)
         return;     // avoid crash if log file didn't open
     if (!::write(_fd, message.data(), message.length())) {
         // XXX help! help!
     }
 }
Beispiel #3
0
void DailyFileAppender::_append(const LoggingEvent& event)
{
	if(this->reopen())
	{
		std::string message(_getLayout().format(event));
		if (!::write(_fd, message.data(), message.length()))
		{
			// XXX help! help!
		}
	}
}
Beispiel #4
0
   void BufferingAppender::dump()
   {
      Layout& layout = _getLayout();
      std::ostringstream s;
      //  Solaris 10 CC can't work with const_reverse_iterator
      for(queue_t::reverse_iterator i = queue_.rbegin(), last = queue_.rend(); i != last; ++i)
         s << layout.format(*i);

      LoggingEvent event(EMPTY, s.str(), EMPTY, Priority::NOTSET);
      sink_->doAppend(event);
   }
Beispiel #5
0
    void OstreamAppender::_append(const LoggingEvent& event) {
		if( gColorCode != colorPriority[event.priority/100] )
		{
			gColorCode = colorPriority[event.priority/100];
#ifdef _WIN32
			SetConsoleTextAttribute(stdout_handle, gColorCode);
#else
			printf(colorstrings[gColorCode]);
#endif
		}
        (*_stream) << _getLayout().format(event);
        if (!_stream->good()) {
            // XXX help! help!
        }
    }
    void Win32DebugAppender::_append(const LoggingEvent& event) {
        std::string message(_getLayout().format(event));
		::OutputDebugString(message.c_str());
    }
 void StringQueueAppender::_append(const LoggingEvent& event) {
     _queue.push(_getLayout().format(event));
 }
Beispiel #8
0
 void SyslogAppender::_append(const LoggingEvent& event) {
     std::string message(_getLayout().format(event));
     int priority = toSyslogPriority(event.priority);
     ::syslog(priority | _facility, "%s", message.c_str());
 }
Beispiel #9
0
 void OstreamAppender::_append(const LoggingEvent& event) {
     (*_stream) << _getLayout().format(event);
     if (!_stream->good()) {
         // XXX help! help!
     }
 }