ACE/FAQ/APG/Logging
Материал из Wiki.crossplatform.ru
[править] Callback.h
// $Id: Callback.h 80826 2008-03-04 14:51:23Z wotte $ #ifndef APG_CALLBACK_H #define APG_CALLBACK_H #include "ace/streams.h" #include "ace/Log_Msg.h" #include "ace/Log_Msg_Callback.h" #include "ace/Log_Record.h" class Callback : public ACE_Log_Msg_Callback { public: void log (ACE_Log_Record &log_record) { # if defined (ACE_LACKS_IOSTREAM_TOTALLY) log_record.print (ACE_TEXT (""), 0, stderr); log_record.print (ACE_TEXT (""), ACE_Log_Msg::VERBOSE, stderr); # else log_record.print (ACE_TEXT (""), 0, cerr); log_record.print (ACE_TEXT (""), ACE_Log_Msg::VERBOSE, cerr); # endif /* ACE_LACKS_IOSTREAM_TOTALLY */ } }; #endif /* APG_CALLBACK_H */
[править] Callback-2.h
// $Id: Callback-2.h 81978 2008-06-16 16:57:12Z sowayaa $ #ifndef APG_CALLBACK2_H #define APG_CALLBACK2_H #include "ace/OS_NS_time.h" #include "ace/streams.h" #include "ace/Log_Msg_Callback.h" #include "ace/Log_Record.h" #include "ace/SString.h" #include "ace/Time_Value.h" class Callback : public ACE_Log_Msg_Callback { public: void log (ACE_Log_Record &log_record) { cerr << "Log Message Received:" << endl; unsigned long msg_severity = log_record.type (); ACE_Log_Priority prio = static_cast<ACE_Log_Priority> (msg_severity); const ACE_TCHAR *prio_name = ACE_Log_Record::priority_name (prio); cerr << "\tType: " << ACE_TEXT_ALWAYS_CHAR (prio_name) << endl; cerr << "\tLength: " << log_record.length () << endl; const time_t epoch = log_record.time_stamp ().sec (); cerr << "\tTime_Stamp: " << ACE_TEXT_ALWAYS_CHAR (ACE_OS::ctime (&epoch)) << flush; cerr << "\tPid: " << log_record.pid () << endl; ACE_CString data (">> "); data += ACE_TEXT_ALWAYS_CHAR (log_record.msg_data ()); cerr << "\tMsgData: " << data.c_str () << endl; } }; #endif /* APG_CALLBACK2_H */
[править] Callback-3.h
// $Id: Callback-3.h 91762 2010-09-14 12:08:05Z shuston $ #ifndef APG_CALLBACK3_H #define APG_CALLBACK3_H #include "ace/streams.h" #include "ace/CDR_Stream.h" #include "ace/Log_Msg.h" #include "ace/Log_Msg_Callback.h" #include "ace/Log_Record.h" #include "ace/SOCK_Stream.h" #include "ace/SOCK_Connector.h" #include "ace/INET_Addr.h" #define LOGGER_PORT 20009 class Callback : public ACE_Log_Msg_Callback { public: Callback () { this->logger_ = new ACE_SOCK_Stream; ACE_SOCK_Connector connector; ACE_INET_Addr addr (LOGGER_PORT, ACE_DEFAULT_SERVER_HOST); if (connector.connect (*(this->logger_), addr) == -1) { delete this->logger_; this->logger_ = 0; } } virtual ~Callback () { if (this->logger_) { this->logger_->close (); } delete this->logger_; } void log (ACE_Log_Record &log_record) { if (!this->logger_) { # if defined (ACE_LACKS_IOSTREAM_TOTALLY) log_record.print (ACE_TEXT (""), ACE_Log_Msg::VERBOSE, stderr); # else log_record.print(ACE_TEXT (""), ACE_Log_Msg::VERBOSE, cerr); # endif /* ACE_LACKS_IOSTREAM_TOTALLY */ return; } ACE_OutputCDR cdr; cdr << log_record; if (this->logger_->send_n (cdr.begin ()) == -1) { delete this->logger_; this->logger_ = 0; } } private: ACE_SOCK_Stream *logger_; }; #endif /* APG_CALLBACK3_H */
[править] Trace.h
// $Id: Trace.h 92376 2010-10-27 17:52:49Z johnnyw $ #ifndef TRACE_H #define TRACE_H #include "ace/Log_Msg.h" // Listing 1 code/ch03 class Trace { public: Trace (const ACE_TCHAR *prefix, const ACE_TCHAR *name, int line, const ACE_TCHAR *file) { this->prefix_ = prefix; this->name_ = name; this->line_ = line; this->file_ = file; ACE_Log_Msg *lm = ACE_LOG_MSG; if (lm->tracing_enabled () && lm->trace_active () == 0) { lm->trace_active (1); ACE_DEBUG ((LM_TRACE, ACE_TEXT ("%s%*s(%t) calling %s in file `%s'") ACE_TEXT (" on line %d\n"), this->prefix_, Trace::nesting_indent_ * lm->inc (), ACE_TEXT (""), this->name_, this->file_, this->line_)); lm->trace_active (0); } } void setLine (int line) { this->line_ = line; } ~Trace (void) { ACE_Log_Msg *lm = ACE_LOG_MSG; if (lm->tracing_enabled () && lm->trace_active () == 0) { lm->trace_active (1); ACE_DEBUG ((LM_TRACE, ACE_TEXT ("%s%*s(%t) leaving %s in file `%s'") ACE_TEXT (" on line %d\n"), this->prefix_, Trace::nesting_indent_ * lm->dec (), ACE_TEXT (""), this->name_, this->file_, this->line_)); lm->trace_active (0); } } private: enum { nesting_indent_ = 3 }; const ACE_TCHAR *prefix_; const ACE_TCHAR *name_; const ACE_TCHAR *file_; int line_; }; // Listing 1 // Listing 2 code/ch03 #define TRACE_PREFIX ACE_TEXT ("TRACE ") #if defined (TRACE) #undef TRACE #endif /* TRACE */ #if (ACE_NTRACE == 1) # define TRACE(X) # define TRACE_RETURN(V) return V; # define TRACE_RETURN_VOID() #else # define TRACE(X) \ Trace ____ (TRACE_PREFIX, \ ACE_TEXT (X), \ __LINE__, \ ACE_TEXT (__FILE__)) # define TRACE_RETURN(V) \ do { ____.setLine(__LINE__); return V; } while (0) # define TRACE_RETURN_VOID() \ do { ____.setLine(__LINE__); } while (0) #endif // Listing 2 ////////////////////////////////////////////////// // Listing 3 code/ch03 #define DEBUG_PREFIX ACE_TEXT ("DEBUG%I") #define INFO_PREFIX ACE_TEXT ("INFO%I") #define NOTICE_PREFIX ACE_TEXT ("NOTICE%I") #define WARNING_PREFIX ACE_TEXT ("WARNING%I") #define ERROR_PREFIX ACE_TEXT ("ERROR%I") #define CRITICAL_PREFIX ACE_TEXT ("CRITICAL%I") #define ALERT_PREFIX ACE_TEXT ("ALERT%I") #define EMERGENCY_PREFIX ACE_TEXT ("EMERGENCY%I") #define MY_DEBUG(X) \ ACE_DEBUG(( LM_DEBUG, \ DEBUG_PREFIX \ X)) #define MY_INFO(X) \ ACE_DEBUG(( LM_INFO, \ INFO_PREFIX \ X)) #define MY_NOTICE(X) \ ACE_DEBUG(( LM_NOTICE, \ NOTICE_PREFIX \ X)) #define MY_WARNING(X) \ ACE_DEBUG(( LM_WARNING, \ WARNING_PREFIX \ X)) #define MY_ERROR(X) \ ACE_DEBUG(( LM_ERROR, \ ERROR_PREFIX \ X)) #define MY_CRITICAL(X) \ ACE_DEBUG(( LM_CRITICAL, \ CRITICAL_PREFIX \ X)) #define MY_ALERT(X) \ ACE_DEBUG(( LM_ALERT, \ ALERT_PREFIX \ X)) #define MY_EMERGENCY(X) \ ACE_DEBUG(( LM_EMERGENCY, \ EMERGENCY_PREFIX \ X)) // Listing 3 #endif /* TRACE_H */
[править] LogManager.h
// $Id: LogManager.h 80826 2008-03-04 14:51:23Z wotte $ #include "ace/streams.h" #include "ace/Synch.h" #include "ace/Singleton.h" #include "ace/Log_Msg.h" #include "ace/Log_Msg_Callback.h" #ifndef LOG_MANAGER_H #define LOG_MANAGER_H // Listing 1 code/ch03 class LogManager { public: LogManager (); ~LogManager (); void redirectToDaemon (const ACE_TCHAR *prog_name = ACE_TEXT ("")); void redirectToSyslog (const ACE_TCHAR *prog_name = ACE_TEXT ("")); void redirectToOStream (ACE_OSTREAM_TYPE *output); void redirectToFile (const char *filename); void redirectToStderr (void); ACE_Log_Msg_Callback * redirectToCallback (ACE_Log_Msg_Callback *callback); // Exclude 1 private: ofstream *log_stream_; ACE_OSTREAM_TYPE *output_stream_; // Exclude 1 }; // Listing 1 // Listing 2 code/ch03 LogManager::LogManager () : log_stream_ (0), output_stream_ (0) { } LogManager::~LogManager () { if (log_stream_) log_stream_->close (); delete log_stream_; } void LogManager::redirectToSyslog (const ACE_TCHAR *prog_name) { ACE_LOG_MSG->open (prog_name, ACE_Log_Msg::SYSLOG, prog_name); } void LogManager::redirectToDaemon (const ACE_TCHAR *prog_name) { ACE_LOG_MSG->open (prog_name, ACE_Log_Msg::LOGGER, ACE_DEFAULT_LOGGER_KEY); } void LogManager::redirectToOStream (ACE_OSTREAM_TYPE *output) { output_stream_ = output; ACE_LOG_MSG->msg_ostream (this->output_stream_); ACE_LOG_MSG->clr_flags (ACE_Log_Msg::STDERR | ACE_Log_Msg::LOGGER); ACE_LOG_MSG->set_flags (ACE_Log_Msg::OSTREAM); } void LogManager::redirectToFile (const char *filename) { log_stream_ = new ofstream (); log_stream_->open (filename, ios::out | ios::app); this->redirectToOStream ((ACE_OSTREAM_TYPE *)log_stream_); } void LogManager::redirectToStderr (void) { ACE_LOG_MSG->clr_flags (ACE_Log_Msg::OSTREAM | ACE_Log_Msg::LOGGER); ACE_LOG_MSG->set_flags (ACE_Log_Msg::STDERR); } ACE_Log_Msg_Callback * LogManager::redirectToCallback (ACE_Log_Msg_Callback * callback) { ACE_Log_Msg_Callback *previous = ACE_LOG_MSG->msg_callback (callback); if (callback == 0) ACE_LOG_MSG->clr_flags (ACE_Log_Msg::MSG_CALLBACK); else ACE_LOG_MSG->set_flags (ACE_Log_Msg::MSG_CALLBACK); return previous; } // Listing 2 // Listing 3 code/ch03 typedef ACE_Singleton<LogManager, ACE_Null_Mutex> LogManagerSingleton; #define LOG_MANAGER LogManagerSingleton::instance() // Listing 3 #endif /* LOG_MANAGER_H */
[править] Log_Msg_Alt.h
// $Id: Log_Msg_Alt.h 80826 2008-03-04 14:51:23Z wotte $ #ifndef LOG_MSG_ALT_H #define LOG_MSG_ALT_H #include "ace/Log_Msg.h" // Listing 1 code/ch03 #define MY_DEBUG LM_DEBUG, ACE_TEXT ("DEBUG%I") #define MY_INFO LM_INFO, ACE_TEXT ("INFO%I") #define MY_NOTICE LM_NOTICE, ACE_TEXT ("NOTICE%I") #define MY_WARNING LM_WARNING, ACE_TEXT ("WARNING%I") #define MY_ERROR LM_ERROR, ACE_TEXT ("ERROR%I") #define MY_CRITICAL LM_CRITICAL, ACE_TEXT ("CRITICAL%I") #define MY_ALERT LM_ALERT, ACE_TEXT ("ALERT%I") #define MY_EMERGENCY LM_EMERGENCY, ACE_TEXT ("EMERGENCY%I") // Listing 1 #endif /* LOG_ALT_H */
[править] Change Instance Default
/** * $Id: Change_Instance_Default.cpp 91813 2010-09-17 07:52:52Z johnnyw $ * * Sample code from The ACE Programmer's Guide, * Copyright 2003 Addison-Wesley. All Rights Reserved. * * This code shows how to set the ACE_Log_Msg per-instance default * differently for groups of spawned threads. */ #include "ace/Log_Msg.h" #include "ace/Thread_Manager.h" ACE_THR_FUNC_RETURN worker (void *) { // do some work return 0; } ACE_THR_FUNC_RETURN service (void *) { // run the service return 0; } int ACE_TMAIN (int, ACE_TCHAR *[]) { // Listing 1 code/ch03 ACE_LOG_MSG->priority_mask (0, ACE_Log_Msg::PROCESS); ACE_Log_Msg::enable_debug_messages (); ACE_Thread_Manager::instance ()->spawn (service); ACE_Log_Msg::disable_debug_messages (); ACE_Thread_Manager::instance ()->spawn_n (3, worker); // Listing 1 ACE_Thread_Manager::instance ()->wait (); return 0; }
[править] Change Mask
// $Id: Change_Mask.cpp 80826 2008-03-04 14:51:23Z wotte $ #include "ace/Log_Msg.h" void foo (void); int ACE_TMAIN (int, ACE_TCHAR *[]) { ACE_TRACE ("main"); // Listing 1 code/ch03 ACE_LOG_MSG->priority_mask (0, ACE_Log_Msg::PROCESS); ACE_LOG_MSG->priority_mask (LM_DEBUG | LM_NOTICE, ACE_Log_Msg::THREAD); // Listing 1 ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IHi Mom\n"))); foo (); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%IGoodnight\n"))); return 0; } void foo (void) { ACE_TRACE ("foo"); ACE_DEBUG ((LM_NOTICE, ACE_TEXT ("%IHowdy Pardner\n"))); }
[править] Howto Syslog
// $Id: Howto_Syslog.cpp 80826 2008-03-04 14:51:23Z wotte $ #include "ace/Log_Msg.h" void foo (void); // Listing 1 code/ch03 int ACE_TMAIN (int, ACE_TCHAR *argv[]) { ACE_LOG_MSG->open (argv[0], ACE_Log_Msg::SYSLOG, ACE_TEXT ("syslogTest")); // Listing 1 ACE_TRACE ("main"); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%IHi Mom\n"))); foo (); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IGoodnight\n"))); return 0; } void foo (void) { ACE_TRACE ("foo"); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IHowdy Pardner\n"))); }
[править] Simple1
// $Id: Simple1.cpp 91813 2010-09-17 07:52:52Z johnnyw $ #include "ace/Log_Msg.h" void foo (void); int ACE_TMAIN (int, ACE_TCHAR *[]) { ACE_TRACE("main"); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IHi Mom\n"))); foo(); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IGoodnight\n"))); return 0; } void foo (void) { ACE_TRACE ("foo"); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IHowdy Pardner\n"))); }
[править] Simple2
// $Id: Simple2.cpp 80826 2008-03-04 14:51:23Z wotte $ #include "ace/Log_Msg.h" void foo(void); int ACE_TMAIN (int, ACE_TCHAR *[]) { ACE_TRACE ("main"); ACE_LOG_MSG->priority_mask (LM_DEBUG | LM_NOTICE, ACE_Log_Msg::PROCESS); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IHi Mom\n"))); foo (); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%IGoodnight\n"))); return 0; } void foo(void) { ACE_TRACE ("foo"); ACE_DEBUG ((LM_NOTICE, ACE_TEXT ("%IHowdy Pardner\n"))); }
[править] Trace Return
// $Id: Trace_Return.cpp 92385 2010-10-28 07:12:17Z johnnyw $ #include "Trace.h" // Listing 1 code/ch03 void foo (void); int ACE_TMAIN (int, ACE_TCHAR *[]) { TRACE ("main"); MY_DEBUG (ACE_TEXT ("Hi Mom\n")); foo (); MY_DEBUG (ACE_TEXT ("Goodnight\n")); TRACE_RETURN (0); } void foo (void) { TRACE ("foo"); MY_DEBUG (ACE_TEXT ("Howdy Pardner\n")); TRACE_RETURN_VOID (); } // Listing 1
[править] Use Callback
// $Id: Use_Callback.cpp 80826 2008-03-04 14:51:23Z wotte $ #include "ace/Log_Msg.h" #include "Callback.h" int ACE_TMAIN (int, ACE_TCHAR *[]) { Callback *callback = new Callback; ACE_LOG_MSG->set_flags (ACE_Log_Msg::MSG_CALLBACK); ACE_LOG_MSG->clr_flags (ACE_Log_Msg::STDERR); ACE_LOG_MSG->msg_callback (callback); ACE_TRACE ("main"); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%IHi Mom\n"))); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IGoodnight\n"))); return 0; }
[править] Use Callback2
// $Id: Use_Callback2.cpp 80826 2008-03-04 14:51:23Z wotte $ #include "ace/Log_Msg.h" #include "Callback-2.h" int ACE_TMAIN (int, ACE_TCHAR *[]) { Callback *callback = new Callback; ACE_LOG_MSG->set_flags (ACE_Log_Msg::MSG_CALLBACK); ACE_LOG_MSG->clr_flags (ACE_Log_Msg::STDERR); ACE_LOG_MSG->msg_callback (callback); ACE_TRACE ("main"); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%IHi Mom\n"))); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IGoodnight\n"))); return 0; }
[править] Use LogManager
// $Id: Use_LogManager.cpp 80826 2008-03-04 14:51:23Z wotte $ #include "LogManager.h" // Listing 1 code/ch03 void foo (void); int ACE_TMAIN (int, ACE_TCHAR *[]) { LOG_MANAGER->redirectToStderr (); ACE_TRACE ("main"); LOG_MANAGER->redirectToSyslog (); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IHi Mom\n"))); foo (); LOG_MANAGER->redirectToDaemon (); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IGoodnight\n"))); return 0; } void foo (void) { ACE_TRACE ("foo"); LOG_MANAGER->redirectToFile ("output.test"); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IHowdy Pardner\n"))); } // Listing 1 // Listing 2 code/ch03 #if defined (ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION) template ACE_Singleton<LogManager, ACE_Null_Mutex> * ACE_Singleton<LogManager, ACE_Null_Mutex>::singleton_; #endif /* ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION */ // Listing 2
[править] Use Logger
// $Id: Use_Logger.cpp 81978 2008-06-16 16:57:12Z sowayaa $ #include "ace/Log_Msg.h" int ACE_TMAIN (int, ACE_TCHAR *argv[]) { ACE_LOG_MSG->open (argv[0], ACE_Log_Msg::LOGGER, ACE_DEFAULT_LOGGER_KEY); ACE_TRACE ("main"); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%IHi Mom\n"))); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IGoodnight\n"))); return 0; }
[править] Use Logging Server
// $Id: Use_Logging_Server.cpp 80826 2008-03-04 14:51:23Z wotte $ #include "ace/Log_Msg.h" #include "Callback-3.h" int ACE_TMAIN (int, ACE_TCHAR *[]) { Callback *callback = new Callback; ACE_LOG_MSG->set_flags (ACE_Log_Msg::MSG_CALLBACK); ACE_LOG_MSG->clr_flags (ACE_Log_Msg::STDERR); ACE_LOG_MSG->msg_callback (callback); ACE_TRACE ("main"); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%IHi Mom\n"))); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IGoodnight\n"))); return 0; }
[править] Use Logging Strategy
// $Id: Use_Logging_Strategy.cpp 80826 2008-03-04 14:51:23Z wotte $ #include "ace/Log_Msg.h" #include "ace/Service_Config.h" /* Put the following in your svc.conf: dynamic Logger Service_Object * ACE:_make_ACE_Logging_Strategy() "-s log.out -f STDERR|OSTREAM -p DEBUG|NOTICE" There seems to be a bug in ACE_Logging_Strategy in that the priority flags are not propagated to spawned threads. */ // Listing 1 code/ch03 int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { if (ACE_Service_Config::open (argc, argv, ACE_DEFAULT_LOGGER_KEY, 1, 0, 1) < 0) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("Service Config open")), 1); ACE_TRACE ("main"); ACE_DEBUG ((LM_NOTICE, ACE_TEXT ("%t%IHowdy Pardner\n"))); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%t%IGoodnight\n"))); return 0; } // Listing 1
[править] Use Multiple Sinks
// $Id: Use_Multiple_Sinks.cpp 80826 2008-03-04 14:51:23Z wotte $ #include "ace/Log_Msg.h" #include "ace/streams.h" int ACE_TMAIN (int, ACE_TCHAR *argv[]) { // Output to default destination (stderr) ACE_LOG_MSG->open (argv[0]); ACE_TRACE ("main"); ACE_OSTREAM_TYPE *output = (ACE_OSTREAM_TYPE *) new ofstream ("ostream.output.test"); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%IThis will go to STDERR\n"))); ACE_LOG_MSG->open (argv[0], ACE_Log_Msg::SYSLOG, ACE_TEXT ("syslogTest")); ACE_LOG_MSG->set_flags (ACE_Log_Msg::STDERR); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%IThis goes to STDERR & syslog\n"))); ACE_LOG_MSG->msg_ostream (output, 0); ACE_LOG_MSG->set_flags (ACE_Log_Msg::OSTREAM); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%IThis will go to STDERR, ") ACE_TEXT ("syslog & an ostream\n"))); ACE_LOG_MSG->clr_flags (ACE_Log_Msg::OSTREAM); delete output; return 0; }
[править] Use Ostream
// $Id: Use_Ostream.cpp 80826 2008-03-04 14:51:23Z wotte $ #include "ace/Log_Msg.h" #include "ace/streams.h" void foo (void); int ACE_TMAIN (int, ACE_TCHAR *[]) { ACE_TRACE ("main"); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%IHi Mom\n"))); /* Alternatively, you can use the set_flags() method to do the same thing after the singleton has been created: */ // Listing 2 code/ch03 ACE_OSTREAM_TYPE *output = (ACE_OSTREAM_TYPE *) new ofstream ("ostream.output.test"); ACE_LOG_MSG->msg_ostream (output, 1); ACE_LOG_MSG->set_flags (ACE_Log_Msg::OSTREAM); ACE_LOG_MSG->clr_flags (ACE_Log_Msg::STDERR); // Listing 2 foo (); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IGoodnight\n"))); return 0; } void foo (void) { ACE_TRACE ("foo"); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IHowdy Pardner\n"))); }
[править] Use Stderr
// $Id: Use_Stderr.cpp 80826 2008-03-04 14:51:23Z wotte $ #include "ace/Log_Msg.h" void foo (void); // Listing 1 code/ch03 int ACE_TMAIN (int, ACE_TCHAR *argv[]) { // open() requires the name of the application // (e.g. -- argv[0]) because the underlying // implementation may use it in the log output. ACE_LOG_MSG->open (argv[0], ACE_Log_Msg::STDERR); // Listing 1 /* Alternatively, you can use the set_flags() method to do the same thing after the singleton has been created: */ ACE_TRACE ("main"); // Listing 2 code/ch03 ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%IHi Mom\n"))); ACE_LOG_MSG->set_flags (ACE_Log_Msg::STDERR); foo (); // Listing 2 ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IGoodnight\n"))); return 0; } void foo (void) { ACE_TRACE ("foo"); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IHowdy Pardner\n"))); }
[править] Use Syslog
// $Id: Use_Syslog.cpp 80826 2008-03-04 14:51:23Z wotte $ #include "ace/Log_Msg.h" void foo (void); int ACE_TMAIN (int, ACE_TCHAR *argv[]) { // This will be directed to stderr (the default ACE_Log_Msg // behavior). ACE_TRACE ("main"); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%IHi Mom\n"))); // Everything from foo() will be directed to the system logger ACE_LOG_MSG->open (argv[0], ACE_Log_Msg::SYSLOG, ACE_TEXT ("syslogTest")); foo (); // Now we reset the log output to default (stderr) ACE_LOG_MSG->open (argv[0]); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IGoodnight\n"))); return 0; } void foo (void) { ACE_TRACE ("foo"); ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IHowdy Pardner\n"))); }
[править] Wrap Macros
// $Id: Wrap_Macros.cpp 92385 2010-10-28 07:12:17Z johnnyw $ #include "Trace.h" // Listing 1 code/ch03 void foo (void); int ACE_TMAIN (int, ACE_TCHAR *[]) { ACE_TRACE ("main"); MY_DEBUG (ACE_TEXT ("Hi Mom\n")); foo (); MY_DEBUG (ACE_TEXT ("Goodnight\n")); return 0; } void foo (void) { ACE_TRACE ("foo"); MY_DEBUG (ACE_TEXT ("Howdy Pardner\n")); } // Listing 1
[править] Wrap Macros Alt
// $Id: Wrap_Macros_Alt.cpp 91813 2010-09-17 07:52:52Z johnnyw $ #include "Log_Msg_Alt.h" void foo (void); int ACE_TMAIN (int, ACE_TCHAR *[]) { ACE_TRACE ("main"); // Listing 1 code/ch03 ACE_DEBUG ((MY_DEBUG ACE_TEXT ("Hi Mom\n"))); ACE_DEBUG ((MY_DEBUG ACE_TEXT ("Goodnight\n"))); // Listing 1 return 0; }