libassa 3.5.0
|
#include <RemoteLogger.h>
Public Member Functions | |
RemoteLogger () | |
virtual int | open () |
Called by Connector upon establishing connection. | |
virtual int | handle_close (int fd_) |
Called by Reactor when we close connection with log_close() | |
virtual int | log_open (const char *appname_, const char *logfname_, u_long groups_, u_long maxsize_, Reactor *reactor_) |
Calling results into sending SIGN-ON message. | |
virtual int | log_close (void) |
Close connection to the assa-logd. | |
virtual void | log_resync (void) |
Flush output buffer. | |
virtual int | log_msg (Group g_, size_t indent_level_, const string &func_name_, size_t expected_sz_, const char *fmt_, va_list) |
virtual int | log_func (Group g_, size_t indent_level_, const string &func_name_, marker_t type_) |
Private Types | |
enum | state_t { opened, closed } |
enum | msg_t { SIGN_ON = 0, SIGN_OFF, LOG_MSG } |
Private Member Functions | |
RemoteLogger (const RemoteLogger &) | |
RemoteLogger & | operator= (const RemoteLogger &) |
Private Attributes | |
state_t | m_state |
Reactor * | m_reactor |
bool | m_recursive_call |
If true, recursive call is in progress. |
Definition at line 38 of file RemoteLogger.h.
enum ASSA::RemoteLogger::msg_t [private] |
Definition at line 83 of file RemoteLogger.h.
enum ASSA::RemoteLogger::state_t [private] |
RemoteLogger::RemoteLogger | ( | ) |
Definition at line 30 of file RemoteLogger.cpp.
: m_state (closed), m_recursive_call (false) { // no-op }
ASSA::RemoteLogger::RemoteLogger | ( | const RemoteLogger & | ) | [private] |
int RemoteLogger::handle_close | ( | int | fd_ | ) | [virtual] |
Called by Reactor when we close connection with log_close()
Reimplemented from ASSA::EventHandler.
Definition at line 105 of file RemoteLogger.cpp.
References closed, ASSA::Logger_Impl::m_logfname, and m_state.
{ m_state = closed; m_logfname.empty (); return 0; }
int RemoteLogger::log_close | ( | void | ) | [virtual] |
Close connection to the assa-logd.
Send SIGN_OFF message to the log server and stop data processing. We are managed by Logger class.
Implements ASSA::Logger_Impl.
Definition at line 89 of file RemoteLogger.cpp.
References ASSA::flush(), ASSA::ServiceHandler< ASSA::IPv4Socket >::get_stream(), m_reactor, m_recursive_call, m_state, opened, ASSA::READ_EVENT, ASSA::Reactor::removeHandler(), and SIGN_OFF.
{ if (m_state == opened) { m_recursive_call = true; get_stream () << 1234567890 << SIGN_OFF << 0 << ASSA::flush; m_reactor->removeHandler (this, READ_EVENT); m_recursive_call = false; } return 0; }
int RemoteLogger::log_func | ( | Group | g_, |
size_t | indent_level_, | ||
const string & | func_name_, | ||
marker_t | type_ | ||
) | [virtual] |
Header + body (preamble;LOG_MSG;length;msg)
Implements ASSA::Logger_Impl.
Definition at line 175 of file RemoteLogger.cpp.
References ASSA::Logger_Impl::add_timestamp(), closed, ASSA::flush(), ASSA::FUNC_ENTRY, ASSA::ServiceHandler< ASSA::IPv4Socket >::get_stream(), ASSA::Logger_Impl::group_enabled(), ASSA::Logger_Impl::indent_func_name(), LOG_MSG, m_recursive_call, m_state, and ASSA::Socket::xdr_length().
{ if (m_recursive_call) { return 0; } if (m_state == closed) { return -1; } if (! group_enabled (groups_)) { return 0; } std::ostringstream os; add_timestamp (os); indent_func_name (os, func_name_, indent_level_, type_); os << ((type_ == FUNC_ENTRY) ? "---v---\n" : "---^---\n"); if (get_stream ().good ()) { m_recursive_call = true; get_stream () << 1234567890 << LOG_MSG << Socket::xdr_length (os.str ()) << os.str () << ASSA::flush; m_recursive_call = false; } else { m_state = closed; } return 0; }
int RemoteLogger::log_msg | ( | Group | g_, |
size_t | indent_level_, | ||
const string & | func_name_, | ||
size_t | expected_sz_, | ||
const char * | fmt_, | ||
va_list | msg_list_ | ||
) | [virtual] |
Header + body (preamble;LOG_MSG;length;msg)
Implements ASSA::Logger_Impl.
Definition at line 125 of file RemoteLogger.cpp.
References ASSA::Logger_Impl::add_timestamp(), Assure_exit, closed, ASSA::flush(), ASSA::Logger_Impl::format_msg(), ASSA::FUNC_MSG, ASSA::ServiceHandler< ASSA::IPv4Socket >::get_stream(), ASSA::Logger_Impl::group_enabled(), ASSA::Logger_Impl::indent_func_name(), LOG_MSG, m_recursive_call, m_state, and ASSA::Socket::xdr_length().
{ if (m_recursive_call) { return 0; } if (m_state == closed) { return -1; } if (!group_enabled (groups_)) { return 0; } std::ostringstream os; add_timestamp (os); indent_func_name (os, func_name_, indent_level_, FUNC_MSG); bool release = false; char* msgbuf_ptr = format_msg (expected_sz_, fmt_, msg_list_, release); if (msgbuf_ptr == NULL) { return -1; // failed to format } os << msgbuf_ptr; if (release) { delete [] msgbuf_ptr; } if (get_stream ()) { m_recursive_call = true; Assure_exit (os.str ().length () != 0); get_stream () << 1234567890 << LOG_MSG << Socket::xdr_length (os.str ()) << os.str () << ASSA::flush; m_recursive_call = false; } else { m_state = closed; } return 0; }
int RemoteLogger::log_open | ( | const char * | appname_, |
const char * | logfname_, | ||
u_long | groups_, | ||
u_long | maxsize_, | ||
Reactor * | reactor_ | ||
) | [virtual] |
Calling results into sending SIGN-ON message.
Put stream in a blocking mode. Otherwise, fast clients can override log server.
Send SIGN_ON message to the log server.
Header + Body
Reimplemented from ASSA::Logger_Impl.
Definition at line 46 of file RemoteLogger.cpp.
References ASSA::flush(), ASSA::ServiceHandler< ASSA::IPv4Socket >::get_stream(), ASSA::Logger_Impl::m_groups, ASSA::Logger_Impl::m_logfname, m_reactor, m_recursive_call, m_state, ASSA::Socket::nonblocking, opened, ASSA::READ_EVENT, ASSA::Reactor::registerIOHandler(), SIGN_ON, ASSA::Socket::turnOptionOff(), and ASSA::Socket::xdr_length().
{ if (m_recursive_call) { return 0; } m_recursive_call = true; if (m_state == opened) { return 0; } m_logfname = logfname_; m_groups = groups_; m_reactor = reactor_; m_reactor->registerIOHandler (this, get_stream ().getHandler(), ASSA::READ_EVENT); get_stream ().turnOptionOff (Socket::nonblocking); size_t len = sizeof (maxsize_) + Socket::xdr_length (appname_) + Socket::xdr_length (logfname_); get_stream () << 1234567890 << SIGN_ON << len << maxsize_ << appname_ << logfname_ << ASSA::flush; m_state = opened; m_recursive_call = false; return 0; }
void RemoteLogger::log_resync | ( | void | ) | [virtual] |
Flush output buffer.
Reimplemented from ASSA::Logger_Impl.
Definition at line 114 of file RemoteLogger.cpp.
References ASSA::flush(), ASSA::ServiceHandler< ASSA::IPv4Socket >::get_stream(), m_recursive_call, m_state, and opened.
{ if (m_state == opened) { m_recursive_call = true; get_stream () << ASSA::flush; m_recursive_call = false; } }
int RemoteLogger::open | ( | void | ) | [virtual] |
Called by Connector upon establishing connection.
Implements ASSA::ServiceHandler< ASSA::IPv4Socket >.
Definition at line 39 of file RemoteLogger.cpp.
{
return 0;
}
RemoteLogger& ASSA::RemoteLogger::operator= | ( | const RemoteLogger & | ) | [private] |
Reactor* ASSA::RemoteLogger::m_reactor [private] |
Definition at line 86 of file RemoteLogger.h.
Referenced by log_close(), and log_open().
bool ASSA::RemoteLogger::m_recursive_call [private] |
If true, recursive call is in progress.
Definition at line 89 of file RemoteLogger.h.
Referenced by log_close(), log_func(), log_msg(), log_open(), and log_resync().
state_t ASSA::RemoteLogger::m_state [private] |
Definition at line 85 of file RemoteLogger.h.
Referenced by handle_close(), log_close(), log_func(), log_msg(), log_open(), and log_resync().