libassa  3.5.1
Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
ASSA::RemoteLogger Class Reference

#include <RemoteLogger.h>

Inheritance diagram for ASSA::RemoteLogger:
ASSA::Logger_Impl ASSA::ServiceHandler< ASSA::IPv4Socket > ASSA::EventHandler

Public Member Functions

 RemoteLogger ()
 
virtual int open ()
 Called by Connector upon establishing connection. More...
 
virtual int handle_close (int fd_)
 Called by Reactor when we close connection with log_close() More...
 
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. More...
 
virtual int log_close (void)
 Close connection to the assa-logd. More...
 
virtual void log_resync (void)
 Flush output buffer. More...
 
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_)
 
- Public Member Functions inherited from ASSA::Logger_Impl
 Logger_Impl ()
 
virtual ~Logger_Impl ()
 
void enable_group (Group g_)
 
void disable_group (Group g_)
 
void enable_groups (u_long g_)
 
void disable_groups (u_long g_)
 
void enable_all_groups (void)
 
void disable_all_groups (void)
 
bool group_enabled (Group g_) const
 
void enable_timestamp (void)
 
void disable_timestamp (void)
 
bool timestamp_enabled (void) const
 
void set_timezone (int zone_)
 
void set_indent_step (u_short step_)
 
u_short get_indent_step (void) const
 
virtual int log_open (u_long groups_)
 Open StdErr Logger. More...
 
virtual int log_open (const char *logfname_, u_long groups_, u_long maxsize_)
 Open File Logger. More...
 
- Public Member Functions inherited from ASSA::ServiceHandler< ASSA::IPv4Socket >
 ServiceHandler ()
 Default constructor. More...
 
 ServiceHandler (ASSA::IPv4Socket *ps_)
 Constructor that takes PEER_STREAM as a parameter. More...
 
virtual ~ServiceHandler ()
 Destructor closes and deletes PEER_STREAM. More...
 
virtual void close (void)
 Pure virtual method defined by subclass. More...
 
 operator ASSA::IPv4Socket & ()
 Conversion operator to type PEER_STREAM &. More...
 
ASSA::IPv4Socketget_stream ()
 Return referenct to underlying PEER_STREAM. More...
 
- Public Member Functions inherited from ASSA::EventHandler
 EventHandler ()
 Constructor. More...
 
virtual ~EventHandler ()
 Virtual destructor. More...
 
virtual int handle_read (int fd)
 Read event callback. More...
 
virtual int handle_write (int fd)
 Write handler callback. More...
 
virtual int handle_except (int fd)
 Exception handler callback. More...
 
virtual int handle_timeout (TimerId tid)
 Timeout handler callback. More...
 
virtual int handle_signal (int signum_)
 Signal handler callback. More...
 
virtual void resetState (void)
 A hook for derived class to reset internal state as needed. More...
 
void set_id (const std::string &id_)
 Set EventHandler ID. More...
 
std::string get_id () const
 Retrieve EventHandler ID. More...
 

Private Types

enum  state_t { opened , closed }
 
enum  msg_t { SIGN_ON = 0 , SIGN_OFF , LOG_MSG }
 

Private Member Functions

 RemoteLogger (const RemoteLogger &)
 
RemoteLoggeroperator= (const RemoteLogger &)
 

Private Attributes

state_t m_state
 
Reactorm_reactor
 
bool m_recursive_call
 If true, recursive call is in progress. More...
 

Additional Inherited Members

- Static Public Attributes inherited from ASSA::Logger_Impl
static const unsigned int LOGGER_MAXLINE = 6660
 Maximum length of the formatted message. More...
 
- Protected Member Functions inherited from ASSA::Logger_Impl
virtual u_short add_timestamp (ostream &sink_)
 
virtual u_short indent_func_name (ostream &sink_, const string &funcname_, size_t indent_level_, marker_t type_)
 
char * format_msg (size_t expected_sz_, const char *fmt_, va_list vap_, bool &release_)
 Format and put the message in the buffer. More...
 
- Protected Attributes inherited from ASSA::Logger_Impl
u_short m_indent_step
 Indentation step. More...
 
u_long m_groups
 Enabled groups. More...
 
string m_logfname
 Log file name. More...
 
bool m_tmflg
 Timestamp on/off flag. More...
 
int m_tz
 Timezone: 0-GMT, 1-Local. More...
 
- Protected Attributes inherited from ASSA::ServiceHandler< ASSA::IPv4Socket >
ASSA::IPv4Socketm_peerStream
 Concrete Socket instance. More...
 
- Protected Attributes inherited from ASSA::EventHandler
std::string m_id
 
- Static Protected Attributes inherited from ASSA::Logger_Impl
static char m_msgbuf [LOGGER_MAXLINE]
 Static buffer for formatted message. More...
 

Detailed Description

Definition at line 38 of file RemoteLogger.h.

Member Enumeration Documentation

◆ msg_t

Enumerator
SIGN_ON 
SIGN_OFF 
LOG_MSG 

Definition at line 83 of file RemoteLogger.h.

◆ state_t

Enumerator
opened 
closed 

Definition at line 82 of file RemoteLogger.h.

Constructor & Destructor Documentation

◆ RemoteLogger() [1/2]

RemoteLogger::RemoteLogger ( )

Definition at line 29 of file RemoteLogger.cpp.

30  :
31  m_state (closed),
32  m_recursive_call (false)
33 {
34  // no-op
35 }
bool m_recursive_call
If true, recursive call is in progress.
Definition: RemoteLogger.h:89

◆ RemoteLogger() [2/2]

ASSA::RemoteLogger::RemoteLogger ( const RemoteLogger )
private

Member Function Documentation

◆ handle_close()

int RemoteLogger::handle_close ( int  fd_)
virtual

Called by Reactor when we close connection with log_close()

Reimplemented from ASSA::EventHandler.

Definition at line 104 of file RemoteLogger.cpp.

106 {
107  m_state = closed;
108  m_logfname.empty ();
109  return 0;
110 }
string m_logfname
Log file name.
Definition: Logger_Impl.h:242

References closed, ASSA::Logger_Impl::m_logfname, and m_state.

◆ log_close()

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 88 of file RemoteLogger.cpp.

90 {
94  if (m_state == opened) {
95  m_recursive_call = true;
96  get_stream () << 1234567890 << SIGN_OFF << 0 << ASSA::flush;
98  m_recursive_call = false;
99  }
100  return 0;
101 }
bool removeHandler(EventHandler *eh_, EventType et_=ALL_EVENTS)
Remove Event handler from reactor for either all I/O events or timeout event or both.
Definition: Reactor.cpp:173
Reactor * m_reactor
Definition: RemoteLogger.h:86
ASSA::IPv4Socket & get_stream()
Return referenct to underlying PEER_STREAM.
@ READ_EVENT
Notify when there will be at least 1 byte available for reading from IO channel without blocking .
Definition: EventHandler.h:36
Socket & flush(Socket &os_)
flush manipulator.
Definition: Socket.h:587

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.

◆ log_func()

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 174 of file RemoteLogger.cpp.

179 {
180  if (m_recursive_call) {
181  return 0;
182  }
183  if (m_state == closed) {
184  return -1;
185  }
186  if (! group_enabled (groups_)) {
187  return 0;
188  }
189 
190  std::ostringstream os;
191  add_timestamp (os);
192  indent_func_name (os, func_name_, indent_level_, type_);
193  os << ((type_ == FUNC_ENTRY) ? "---v---\n" : "---^---\n");
194 
197  if (get_stream ().good ()) {
198  m_recursive_call = true;
199  get_stream () << 1234567890 << LOG_MSG << Socket::xdr_length (os.str ())
200  << os.str () << ASSA::flush;
201  m_recursive_call = false;
202  }
203  else {
204  m_state = closed;
205  }
206 
207  return 0;
208 }
virtual u_short indent_func_name(ostream &sink_, const string &funcname_, size_t indent_level_, marker_t type_)
Definition: Logger_Impl.cpp:54
bool group_enabled(Group g_) const
Definition: Logger_Impl.h:164
virtual u_short add_timestamp(ostream &sink_)
Definition: Logger_Impl.cpp:35
static size_t xdr_length(const std::string &s_)
Give the true length of the XDR-encoded STL string.
Definition: Socket.h:343
@ FUNC_ENTRY
Definition: LogMask.h:69

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

◆ log_msg()

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 124 of file RemoteLogger.cpp.

131 {
132  if (m_recursive_call) {
133  return 0;
134  }
135  if (m_state == closed) {
136  return -1;
137  }
138  if (!group_enabled (groups_)) {
139  return 0;
140  }
141 
142  std::ostringstream os;
143  add_timestamp (os);
144  indent_func_name (os, func_name_, indent_level_, FUNC_MSG);
145 
146  bool release = false;
147  char* msgbuf_ptr = format_msg (expected_sz_, fmt_, msg_list_, release);
148  if (msgbuf_ptr == NULL) {
149  return -1; // failed to format
150  }
151 
152  os << msgbuf_ptr;
153 
154  if (release) {
155  delete [] msgbuf_ptr;
156  }
157 
160  if (get_stream ()) {
161  m_recursive_call = true;
162  Assure_exit (os.str ().length () != 0);
163  get_stream () << 1234567890 << LOG_MSG << Socket::xdr_length (os.str ())
164  << os.str () << ASSA::flush;
165  m_recursive_call = false;
166  }
167  else {
168  m_state = closed;
169  }
170  return 0;
171 }
#define Assure_exit(exp_)
Macro that makes program exit if assert fails.
Definition: Assure.h:39
char * format_msg(size_t expected_sz_, const char *fmt_, va_list vap_, bool &release_)
Format and put the message in the buffer.
Definition: Logger_Impl.cpp:86
@ FUNC_MSG
Definition: LogMask.h:68

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

◆ log_open()

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 45 of file RemoteLogger.cpp.

51 {
52  if (m_recursive_call) {
53  return 0;
54  }
55  m_recursive_call = true;
56 
57  if (m_state == opened) {
58  return 0;
59  }
60  m_logfname = logfname_;
61  m_groups = groups_;
62  m_reactor = reactor_;
63 
64  m_reactor->registerIOHandler (this, get_stream ().getHandler(),
66 
71 
74  size_t len = sizeof (maxsize_) +
75  Socket::xdr_length (appname_) +
76  Socket::xdr_length (logfname_);
77 
80  get_stream () << 1234567890 << SIGN_ON << len
81  << maxsize_ << appname_ << logfname_ << ASSA::flush;
82  m_state = opened;
83  m_recursive_call = false;
84  return 0;
85 }
u_long m_groups
Enabled groups.
Definition: Logger_Impl.h:239
bool registerIOHandler(EventHandler *eh_, handler_t fd_, EventType et_=RWE_EVENTS)
Register I/O Event handler with Reactor.
Definition: Reactor.cpp:93
bool turnOptionOff(opt_t opt_)
Disable socket option.
Definition: Socket.cpp:204
@ nonblocking
Set Socket to a non-blocking mode (O_RDWR|O_NONBLOCK).
Definition: Socket.h:115

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

◆ log_resync()

void RemoteLogger::log_resync ( void  )
virtual

Flush output buffer.

Reimplemented from ASSA::Logger_Impl.

Definition at line 113 of file RemoteLogger.cpp.

115 {
116  if (m_state == opened) {
117  m_recursive_call = true;
118  get_stream () << ASSA::flush;
119  m_recursive_call = false;
120  }
121 }

References ASSA::flush(), ASSA::ServiceHandler< ASSA::IPv4Socket >::get_stream(), m_recursive_call, m_state, and opened.

◆ open()

int RemoteLogger::open ( void  )
virtual

Called by Connector upon establishing connection.

Implements ASSA::ServiceHandler< ASSA::IPv4Socket >.

Definition at line 38 of file RemoteLogger.cpp.

40 {
41  return 0;
42 }

◆ operator=()

RemoteLogger& ASSA::RemoteLogger::operator= ( const RemoteLogger )
private

Member Data Documentation

◆ m_reactor

Reactor* ASSA::RemoteLogger::m_reactor
private

Definition at line 86 of file RemoteLogger.h.

Referenced by log_close(), and log_open().

◆ m_recursive_call

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

◆ m_state

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


The documentation for this class was generated from the following files: