NAME

ACE_Log_Msg - Provides a variable length argument message logging abstraction.

SYNOPSIS

#include <ace/Log_Msg.h>

class ACE_Log_Msg { public: enum{ STDERR = 1, LOGGER = 2, OSTREAM = 4, MSG_CALLBACK = 8, VERBOSE = 16, VERBOSE_LITE = 32, SILENT = 64 }; static ACE_Log_Msg *instance (void); static int exists (void); static void disable_debug_messages ( ACE_Log_Priority priority = LM_DEBUG ); static void enable_debug_messages ( ACE_Log_Priority priority = LM_DEBUG ); ACE_Log_Msg (void); ~ACE_Log_Msg (void); int open ( const ASYS_TCHAR *prog_name, u_long options_flags = ACE_Log_Msg::STDERR, LPCTSTR logger_key = 0 ); void set_flags (u_long f); void clr_flags (u_long f); u_long flags (void); int acquire (void); int release (void); void sync (const ASYS_TCHAR *program_name); void op_status (int status); int op_status (void); void errnum (int); int errnum (void); void linenum (int); int linenum (void); void file (const ASYS_TCHAR *); const ASYS_TCHAR *file (void); void msg (const ASYS_TCHAR *); const ASYS_TCHAR *msg (void); void restart (int); int restart (void); void msg_ostream (ACE_OSTREAM_TYPE *); ACE_OSTREAM_TYPE *msg_ostream (void) const; ACE_Log_Msg_Callback *msg_callback (ACE_Log_Msg_Callback *c); ACE_Log_Msg_Callback *msg_callback (void) const; int inc (void); int dec (void); int trace_depth (void); void trace_depth (int); int trace_active (void); void trace_active (int value); ACE_Thread_Descriptor *thr_desc (void) const; void thr_desc (ACE_Thread_Descriptor *td); ACE_SEH_EXCEPT_HANDLER seh_except_selector (void); ACE_SEH_EXCEPT_HANDLER seh_except_selector ( ACE_SEH_EXCEPT_HANDLER ); ACE_SEH_EXCEPT_HANDLER seh_except_handler (void); ACE_SEH_EXCEPT_HANDLER seh_except_handler ( ACE_SEH_EXCEPT_HANDLER ); void stop_tracing (void); void start_tracing (void); int tracing_enabled (void); typedef enum { THREAD, PROCESS } MASK_TYPE; u_long priority_mask (MASK_TYPE = THREAD); u_long priority_mask (u_long, MASK_TYPE = THREAD); int log_priority_enabled (ACE_Log_Priority log_priority); pid_t getpid (void) const; const ASYS_TCHAR *local_host (void) const; void local_host (const ASYS_TCHAR *); void set ( const ASYS_TCHAR *file, int line, int op_status = -1, int errnum = 0, int restart = 1, ACE_OSTREAM_TYPE *os = 0, ACE_Log_Msg_Callback *c = 0 ); ssize_t log ( ACE_Log_Priority priority, const ASYS_TCHAR *format, ... ); ssize_t log ( const ASYS_TCHAR *format, ACE_Log_Priority priority, va_list argp ); ssize_t log (ACE_Log_Record &log_record, int suppress_stderr = 0); int log_hexdump ( ACE_Log_Priority log_priority, const char *buffer, int size, const ASYS_TCHAR *text = 0 ); void dump (void) const; ACE_ALLOC_HOOK_DECLARE; private: int status_; int errnum_; int linenum_; ASYS_TCHAR file_[MAXPATHLEN + 1]; ASYS_TCHAR msg_[ACE_Log_Record::MAXLOGMSGLEN]; int restart_; ACE_OSTREAM_TYPE *ostream_; ACE_Log_Msg_Callback *msg_callback_; int trace_depth_; int trace_active_; int tracing_enabled_; ACE_Thread_Descriptor *thr_desc_; ACE_SEH_EXCEPT_HANDLER seh_except_selector_; ACE_SEH_EXCEPT_HANDLER seh_except_handler_; u_long priority_mask_; static u_long process_priority_mask_; static const ASYS_TCHAR *program_name_; static const ASYS_TCHAR *local_host_; static pid_t pid_; static u_long flags_; static int msg_off_; static int instance_count_; static u_long default_priority_mask_; static int key_created_; inline defined (ACE_HAS_TSS_EMULATION); static void close (void); friend void ACE_OS::cleanup_tss (const u_int); ACE_Log_Msg &operator= (const ACE_Log_Msg &); ACE_Log_Msg (const ACE_Log_Msg &); };

DESCRIPTION

This class is very flexible since it allows formatted error messages to be printed in a thread-safe manner to stderr or a distributed logger. Moreover, the message is kept in a thread-specific storage location, which can be used to communicate errors between framework methods and callers.

Initialization and termination routines.

static ACE_Log_Msg *instance (void);

static int exists (void);

static void disable_debug_messages (
    ACE_Log_Priority priority = LM_DEBUG
    );

static void enable_debug_messages (
    ACE_Log_Priority priority = LM_DEBUG
    );

ACE_Log_Msg (void);

~ACE_Log_Msg (void);

int open (
    const ASYS_TCHAR *prog_name,
    u_long options_flags = ACE_Log_Msg::STDERR,
    LPCTSTR logger_key = 0
    );

Set/get the options flags.

void set_flags (u_long f);

void clr_flags (u_long f);

u_long flags (void);

Allow apps to acquire and release internal synchronization lock.

This lock is used internally by the ACE_Log_Msg implementation. By exporting the lock, applications can hold the lock atomically over a number of calls to ACE_Log_Msg.
int acquire (void);

int release (void);

void sync (const ASYS_TCHAR *program_name);

Set/get methods. Note that these are non-static and thus will

be thread-specific.
void op_status (int status);

int op_status (void);

void errnum (int);

int errnum (void);

void linenum (int);

int linenum (void);

void file (const ASYS_TCHAR *);

const ASYS_TCHAR *file (void);

void msg (const ASYS_TCHAR *);

const ASYS_TCHAR *msg (void);

void restart (int);

int restart (void);

Notice that the following two function is equivalent to

"void msg_ostream (HANDLE)" and "HANDLE msg_ostream (void)" on Windows CE. There is no iostream.h support on CE.
void msg_ostream (ACE_OSTREAM_TYPE *);

ACE_OSTREAM_TYPE *msg_ostream (void) const;

ACE_Log_Msg_Callback *msg_callback (ACE_Log_Msg_Callback *c);

ACE_Log_Msg_Callback *msg_callback (void) const;

Nesting depth increment and decrement.

int inc (void);

int dec (void);

Get/set trace depth.

int trace_depth (void);

void trace_depth (int);

Get/set trace active status.

int trace_active (void);

void trace_active (int value);

ACE_Thread_Descriptor *thr_desc (void) const;

void thr_desc (ACE_Thread_Descriptor *td);

ACE_SEH_EXCEPT_HANDLER seh_except_selector (void);

ACE_SEH_EXCEPT_HANDLER seh_except_selector (ACE_SEH_EXCEPT_HANDLER);

ACE_SEH_EXCEPT_HANDLER seh_except_handler (void);

ACE_SEH_EXCEPT_HANDLER seh_except_handler (ACE_SEH_EXCEPT_HANDLER);

Stop/start/query tracing status on a per-thread basis...

void stop_tracing (void);

void start_tracing (void);

int tracing_enabled (void);

typedef enum { THREAD, PROCESS } MASK_TYPE;

Get/set the priority mask.

u_long priority_mask (MASK_TYPE = THREAD);

u_long priority_mask (u_long, MASK_TYPE = THREAD);

int log_priority_enabled (ACE_Log_Priority log_priority);

pid_t getpid (void) const;

Set/get the name of the local host.

const ASYS_TCHAR *local_host (void) const;

void local_host (const ASYS_TCHAR *);

void set (
    const ASYS_TCHAR *file,
    int line,
    int op_status = -1,
    int errnum = 0,
    int restart = 1,
    ACE_OSTREAM_TYPE *os = 0,
    ACE_Log_Msg_Callback *c = 0
    );

ssize_t log (
    ACE_Log_Priority priority,
    const ASYS_TCHAR *format,
    ...
    );

ssize_t log (
    const ASYS_TCHAR *format,
    ACE_Log_Priority priority,
    va_list argp
    );

ssize_t log (ACE_Log_Record &log_record, int suppress_stderr = 0);

int log_hexdump (
    ACE_Log_Priority log_priority,
    const char *buffer,
    int size,
    const ASYS_TCHAR *text = 0
    );

void dump (void) const;

ACE_ALLOC_HOOK_DECLARE;

The following fields are *not* kept in thread-specific storage.

We only want one instance for the entire process!
static u_long process_priority_mask_;

static const ASYS_TCHAR *program_name_;

static const ASYS_TCHAR *local_host_;

static pid_t pid_;

static u_long flags_;

static int msg_off_;

static int instance_count_;

static u_long default_priority_mask_;

static int key_created_;

inline defined (ACE_HAS_TSS_EMULATION);

static void close (void);

friend void ACE_OS::cleanup_tss (const u_int);

Disallow these operations.

ACE_Log_Msg &operator= (const ACE_Log_Msg &);

ACE_Log_Msg (const ACE_Log_Msg &);

AUTHOR

Doug Schmidt

LIBRARY

ace