U E D R S I H C RSS
ID
Password
Join
이 무한한 우주 공간의 영원한 침묵이 나를 두렵게 한다. -파스칼

 * 몇몇 서버 또는 클라이언트를 만들때, ACE관련 로그 기록들은 화일로 저장하고자 할 때가 있습니다. (실제로 표준출력으로 뽑는 거 보다 화일로 저장하는 것이 부하도 덜 먹습니다) 이럴 때에는 다음과 같이 합니다. 일단 전역에 다음과 같이 선언되어있다고 가정하면,
#include "ace/Log_Msg.h"
#include "ace/streams.h"

static std::ofstream log_output_("myoutput.txt");
초기화부분(main()같은 곳)에 다음과 같이 실행해줍니다.
// CRADLE 에 대한 로그를 cradle.out.txt에 출력되도록 합니다.
ACE_LOG_MSG->msg_ostream(&log_output_, 0);      // 0으로 설정하면 ACE_Log_Msg 객체가 소멸할때 ofstream을 닫지 않습니다. 1은 그 반대.
ACE_LOG_MSG->set_flags(ACE_Log_Msg::OSTREAM);
ACE_LOG_MSG->clr_flags(ACE_Log_Msg::STDERR);
ACE_LOG_MSG->clr_flags(ACE_Log_Msg::LOGGER);
이렇게 하면 ofstream을 통하여 기록이 되도록 설정합니다. 주의! ACE_Log_Msg 클래스는 ACE_Log_Msg::LOGGER을 기본적으로 켜놓은 상태로 실행하는데, 클라이언트 로깅서버를 연결하지 않았다면 기본출력(stdout)을 사용하며 출력하므로 맨 마지막에서 ACE_Log_Msg::LOGGER을 꺼주지 않으면 콘솔화면(stdout)과 화일에 이중으로 출력되게 됩니다. 그러므로 꼭 옵션을 꺼주는 것이 좋습니다. (클라이언트 로깅서버를 사용할 경우라면 물론 다른 처리가 필요없겠지만, 일반적인 네트워크 제품에서 ACE 클라이언트 로깅서버를 사용하지 않을 경우에는 이 방법을 사용해야합니다.)

이제 ACE_TRACE(), ACE_DEBUG(), ACE_ERROR()에 대한 출력이 모두 myoutput.txt에 담기게 됩니다.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-10-28 12:42:52
Processing time 0.0325 sec