헬마입니다.

오래만에 C++ 클래스 하나 올려봅니다. 사실은 Syntax 구문강조 기능 넣어서 적용되나 보려고.. ㄷㄷ

이번에 회사에서 프로젝트 하면서 간단하게 만들어본 로그 작석용 클래스 입니다.

정확히는 ACE 프레임워크에 있던 LOG 클래스 기능을 포팅했습니다.

ACE 프레임워크에서 로그 기능이 탐나는데 그거때문에 ACE 프레임워크를 쓰자니 뭔가 웃기는 짓거리 같아서 이것만 포팅했습니다.

사용법은 간단합니다.

구현은 싱글톤, 정적 클래스 로 구현되어 있습니다. 

LM_INSTANCE()
위 매크로는 싱글턴 클래스의 포인터를 반환하여 로그 클래스를 조작할 수 있도록 해줍니다.
LM_DEBUG(( 내용 ));
위 매크로를 이용하여 로그를 작성합니다. 반드시 괄호를 2개를 사용하셔야 합니다. 내용에는 printf 처럼 몇가지 인자가 들어갈 수 있습니다.
예제).
LM_DEBUG(( _T("[%D %T][PID=%P][Thread=%t][%N-%l][ %s ]"), L"로그 클래스 시험" ));
위와 같이 작성하시면 %D = 날짜, %T = 시간, %P = 프로세스의 PID, %t = 해당 스레드의 TID, %N = 매크로를 호출한 소스코드 파일이름, %l = 매크로를 호출한 소스코드 행 번호, %s = 뒤에 적힌 문자열 로 치환됩니다.
LM_EXIT();
로그 클래스 사용이 끝나면 이 매크로를 추가하여 반드시 메모리에서 해제해야합니다. 그렇지 않으면 약간의 메모리 누수가 발생할 수 있습니다.


전체적인 예).
 
#include 
#include 
#include 
#include 

#include "Util.h"
#include "Log_Msg.h"

int wMain()
{    
	std::wofstream ofStream( L"c:\\a.log", std::ios::out | std::ios::app );    
	ofStream->imbue( std::locale("kor") );  // 이 문장이 없으면 한글이 제대로 파일로 저장되지 않습니다.     

	// 로그를 파일 스트림과 디버그 출력으로 동시에 출력합니다
	LM_INSTANCE()->Open( CLog::LOG_STREAM | CLog::LOG_DEBUGGER, &ofStream, false );
    LM_DEBUG(( _T("[%D %T][PID=%P][Thread=%t][%N-%l][ %s ]"), L"로그 클래스 시험" ));
    LM_EXIT();

	return 0;
}

댓글을 달아 주세요