|
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().
1.7.3