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; }
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! } }
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! } } }
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); }
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)); }
void SyslogAppender::_append(const LoggingEvent& event) { std::string message(_getLayout().format(event)); int priority = toSyslogPriority(event.priority); ::syslog(priority | _facility, "%s", message.c_str()); }
void OstreamAppender::_append(const LoggingEvent& event) { (*_stream) << _getLayout().format(event); if (!_stream->good()) { // XXX help! help! } }