Implements an ACE_Log_Msg_Backend that logs messages to a UNIX system's syslog facility. More...
#include <Log_Msg_UNIX_Syslog.h>
Public Member Functions | |
ACE_Log_Msg_UNIX_Syslog (void) | |
Constructor. | |
virtual | ~ACE_Log_Msg_UNIX_Syslog (void) |
Destructor. | |
virtual int | open (const ACE_TCHAR *logger_key) |
Open a new event log. | |
virtual int | reset (void) |
Reset the backend. | |
virtual int | close (void) |
Close the backend completely. | |
virtual ssize_t | log (ACE_Log_Record &log_record) |
This is called when we want to log a message. | |
Private Member Functions | |
int | convert_log_priority (ACE_UINT32 lm_priority) |
Convert an ACE_Log_Priority value to the corresponding syslog priority. | |
int | convert_log_mask (int lm_mask) |
Convert an ACE_Log_Priority mask to the corresponding syslog mask value. |
Implements an ACE_Log_Msg_Backend that logs messages to a UNIX system's syslog facility.
Definition at line 36 of file Log_Msg_UNIX_Syslog.h.
ACE_Log_Msg_UNIX_Syslog::ACE_Log_Msg_UNIX_Syslog | ( | void | ) |
ACE_Log_Msg_UNIX_Syslog::~ACE_Log_Msg_UNIX_Syslog | ( | void | ) | [virtual] |
int ACE_Log_Msg_UNIX_Syslog::close | ( | void | ) | [virtual] |
Close the backend completely.
Implements ACE_Log_Msg_Backend.
Definition at line 76 of file Log_Msg_UNIX_Syslog.cpp.
{
closelog();
return 0;
}
int ACE_Log_Msg_UNIX_Syslog::convert_log_mask | ( | int | lm_mask | ) | [private] |
Convert an ACE_Log_Priority mask to the corresponding syslog mask value.
Definition at line 171 of file Log_Msg_UNIX_Syslog.cpp.
{ int syslog_mask = 0; if (ACE_BIT_ENABLED (lm_mask, LM_TRACE) || ACE_BIT_ENABLED (lm_mask, LM_DEBUG)) ACE_SET_BITS (syslog_mask, LOG_MASK(LOG_DEBUG)); if (ACE_BIT_ENABLED (lm_mask, LM_STARTUP) || ACE_BIT_ENABLED (lm_mask, LM_SHUTDOWN) || ACE_BIT_ENABLED (lm_mask, LM_INFO)) ACE_SET_BITS (syslog_mask, LOG_MASK(LOG_INFO)); if (ACE_BIT_ENABLED (lm_mask, LM_NOTICE)) ACE_SET_BITS (syslog_mask, LOG_MASK(LOG_NOTICE)); if (ACE_BIT_ENABLED (lm_mask, LM_ERROR)) ACE_SET_BITS (syslog_mask, LOG_MASK(LOG_ERR)); if (ACE_BIT_ENABLED (lm_mask, LM_WARNING)) ACE_SET_BITS (syslog_mask, LOG_MASK(LOG_WARNING)); if (ACE_BIT_ENABLED (lm_mask, LM_CRITICAL)) ACE_SET_BITS (syslog_mask, LOG_MASK(LOG_CRIT)); if (ACE_BIT_ENABLED (lm_mask, LM_ALERT)) ACE_SET_BITS (syslog_mask, LOG_MASK(LOG_ALERT)); if (ACE_BIT_ENABLED (lm_mask, LM_EMERGENCY)) ACE_SET_BITS (syslog_mask, LOG_MASK(LOG_EMERG)); return syslog_mask; }
int ACE_Log_Msg_UNIX_Syslog::convert_log_priority | ( | ACE_UINT32 | lm_priority | ) | [private] |
Convert an ACE_Log_Priority value to the corresponding syslog priority.
Definition at line 132 of file Log_Msg_UNIX_Syslog.cpp.
{ int syslog_priority; switch (lm_priority) { case LM_TRACE: case LM_DEBUG: syslog_priority = LOG_DEBUG; break; case LM_STARTUP: case LM_SHUTDOWN: case LM_INFO: syslog_priority = LOG_INFO; break; case LM_NOTICE: syslog_priority = LOG_NOTICE; break; case LM_WARNING: syslog_priority = LOG_WARNING; break; case LM_CRITICAL: syslog_priority = LOG_CRIT; break; case LM_ALERT: syslog_priority = LOG_ALERT; break; case LM_EMERGENCY: syslog_priority = LOG_EMERG; break; case LM_ERROR: default: syslog_priority = LOG_ERR; break; } return syslog_priority; }
ssize_t ACE_Log_Msg_UNIX_Syslog::log | ( | ACE_Log_Record & | log_record | ) | [virtual] |
This is called when we want to log a message.
Implements ACE_Log_Msg_Backend.
Definition at line 83 of file Log_Msg_UNIX_Syslog.cpp.
{ int syslog_priority = this->convert_log_priority (log_record.type ()); u_long flags = ACE_LOG_MSG->flags (); // The UNIX syslog() facility does not support multi-line messages. // Break up the message data into separate lines and send each line // to the syslog daemon. ACE_TCHAR message[ACE_Log_Record::MAXVERBOSELOGMSGLEN]; ACE_OS::strcpy (message, log_record.msg_data ()); ACE_TCHAR *strtokp = 0; for (ACE_TCHAR *line = ACE_OS::strtok_r (message, ACE_TEXT ("\n"), &strtokp); line != 0; line = ACE_OS::strtok_r (0, ACE_TEXT ("\n"), &strtokp)) { // Format the message line. Note that the processing for // VERBOSE is the same as for VERBOSE_LITE, since syslog() // already provides us with the hostname and PID. However, the // timestamp is duplicated (albeit a shortened version) to // provide a timestamp with greater precision than that provided // by syslog(). if (ACE_BIT_ENABLED (flags, ACE_Log_Msg::VERBOSE) || ACE_BIT_ENABLED (flags, ACE_Log_Msg::VERBOSE_LITE)) { ACE_TCHAR date_and_time[35]; if (0 == ACE::timestamp (date_and_time, sizeof (date_and_time), 1)) ACE_OS::strcpy (date_and_time, ACE_TEXT ("<time error>")); const ACE_TCHAR *prio_name = ACE_Log_Record::priority_name(ACE_Log_Priority(log_record.type())); syslog (syslog_priority, "%s: %s: %s", ACE_TEXT_ALWAYS_CHAR (date_and_time), ACE_TEXT_ALWAYS_CHAR (prio_name), ACE_TEXT_ALWAYS_CHAR (line)); } else // No formatting required. syslog (syslog_priority, "%s", ACE_TEXT_ALWAYS_CHAR (line)); } return 0; }
int ACE_Log_Msg_UNIX_Syslog::open | ( | const ACE_TCHAR * | logger_key | ) | [virtual] |
Open a new event log.
Initialize the event logging facility.
logger_key | The name of the calling program. This name is used as the ident in the syslog entries. If it is 0 (no name), the application name as returned from ACE_Log_Msg::program_name() is used. |
Implements ACE_Log_Msg_Backend.
Definition at line 37 of file Log_Msg_UNIX_Syslog.cpp.
{ if (logger_key == 0) logger_key = ACE_Log_Msg::program_name (); // Initialize the UNIX syslog facility. Default the syslog log // options LOG_CONS and LOG_PID to be set. There really should be a // logging strategy option to control the syslog log options, // however, we'll take the easy way out for now. #if defined (ACE_USES_WCHAR) openlog (ACE_TEXT_ALWAYS_CHAR (logger_key), LOG_CONS|LOG_PID, ACE_DEFAULT_SYSLOG_FACILITY); #else openlog (const_cast<char *> (logger_key), LOG_CONS|LOG_PID, ACE_DEFAULT_SYSLOG_FACILITY); #endif /* ACE_USES_WCHAR */ // Enable logging of all syslog priorities. If logging of all // priorities is not desired, use the ACE_Log_Msg::priority_mask() // method to control the log output sent to the syslog daemon via // the log() method, or use the system's syslog.conf file to select // desired level of information. #if !defined (ACE_LACKS_SETLOGMASK) (void) setlogmask (LOG_UPTO (LOG_DEBUG)); #endif /* ACE_LACKS_SETLOGMASK */ return 0; }
int ACE_Log_Msg_UNIX_Syslog::reset | ( | void | ) | [virtual] |
Reset the backend.
Implements ACE_Log_Msg_Backend.
Definition at line 70 of file Log_Msg_UNIX_Syslog.cpp.
{ return this->close (); }