C++에서는 로그를 남기기 위해 로그 라이브러리를 만들 때 꼭 사용하는 것이 가변인수와 매크로입니다.

 

가변인수를 사용하여

void LogMessage( LPCTSTR format, ... )

{

char SBody[ MAX_PATH ] = { 0, };

va_list  strlist;

va_start( strlist, format );

_vsntprintf_s( SBody, _countof(SBody), _TRUNCATE, format, strlist );

va_end( strlist );

}

이런 식으로 하나의 메시지를 만들고

 

LogMessage함수를 어디서, 언제 호출했는지 알리는 방법은 __FILE__, __LINE__, __FUNCTION__ 와 같은 매크로를 사용합니다.

 

 

이런 기능을 닷넷에서 구현하려면 가변인수는 다음과 같은 방식으로 구현 합니다.

public void print(int i, params string[] messages)

{

         string logmsg;

        

         foreach(string msg in messages)

                  logmsg += msg;

 

}

 

 

그리고 __FILE__, __LINE__, __FUNCTION__ 매크로는 닷넷의 어트리뷰트를 사용합니다.

using System.Runtime.CompilerServices;

using System.Diagnostics;

 

void LogToUI(string logText,

                    [CallerFilePath] string fileName = "",

                    [CallerMemberName] string methodName = "",

                    [CallerLineNumber] int lineNumber = 0)

{

         string logmsg = string.Format("[:{0}|호출:{1}|시간{2}] : {3}", lineNumber, methodName, DateTime.Now.ToShortTimeString(), logText);

         listBoxLog.Items.Add(logmsg);

}

 

// 사용

LogToUI("서버 생성 성공");

 

저작자 표시
신고
by 흥배 2013.04.29 08:00
| 1 |