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 ();
}
1.7.0