for a functional system,log is neccesary,when trying to forg one ,we somehows follow some established schema,that is :
it comprises three part:user interface,internal management,output of msg
in ACE,it still holds above mentioned oracle,
(1) a set of helpful macro,which acts as user interface to forward log msg
(2)ACE_Log_Msg class,which acts as internal log management,this part is the most delicate one,it has note for multithread safety of code,and respondent thread_specific identifying.for ACE,it enumlates tss,and defines ACE_thread_mutex_t,ACE_OS_Object_Manager,log_msg_tss_key ,all these guarantees thread safety;in single thread case,log_msg only enqueenes the msg,and then dumps them at exiting;
(3)ACE_Log_Msg_Backend and ACE_Log_Msg_Callback are defined acting as logmsg listener
we can compare with junit,because for java,there is no support for macro,so for the first constituent,the author defines a set of static methods to provide user interface,and used exception schema to dump the logmsg,and then forwards msg to user log listener
it comprises three part:user interface,internal management,output of msg
in ACE,it still holds above mentioned oracle,
(1) a set of helpful macro,which acts as user interface to forward log msg
(2)ACE_Log_Msg class,which acts as internal log management,this part is the most delicate one,it has note for multithread safety of code,and respondent thread_specific identifying.for ACE,it enumlates tss,and defines ACE_thread_mutex_t,ACE_OS_Object_Manager,log_msg_tss_key ,all these guarantees thread safety;in single thread case,log_msg only enqueenes the msg,and then dumps them at exiting;
(3)ACE_Log_Msg_Backend and ACE_Log_Msg_Callback are defined acting as logmsg listener
we can compare with junit,because for java,there is no support for macro,so for the first constituent,the author defines a set of static methods to provide user interface,and used exception schema to dump the logmsg,and then forwards msg to user log listener