Log4Cpp 소스코드 다운로드
https://log4cpp.sourceforge.net/
1. Log4Cpp 헤더 파일 추가
프로젝트의 stdafx.h 또는 필요한 소스 파일에 Log4Cpp의 헤더 파일을 추가합니다.
cpp
#include <log4cpp/Category.hh>
#include <log4cpp/Appender.hh>
#include <log4cpp/PatternLayout.hh>
#include <log4cpp/FileAppender.hh>
#include <log4cpp/ConsoleAppender.hh>
2. Log4Cpp 라이브러리 파일 링크
Visual Studio 프로젝트의 속성에서 링커 설정을 통해 log4cpp.lib 파일을 링크해야 합니다. 아래 단계를 따르세요.
- 프로젝트 속성을 열고 링커 -> 입력 -> 추가 종속성에 log4cpp.lib를 추가합니다.
- C/C++ -> 일반 -> 추가 포함 디렉터리에 Log4Cpp 헤더 파일이 있는 디렉터리를 추가합니다.
- 링커 -> 일반 -> 추가 라이브러리 디렉터리에 Log4Cpp 라이브러리 파일이 있는 디렉터리를 추가합니다.
3. Log4Cpp 초기화 및 사용
MFC 프로젝트에서 Log4Cpp를 사용하여 로그를 출력하는 방법을 설정합니다. 예를 들어, 콘솔과 파일에 동시에 로그를 출력하도록 설정할 수 있습니다.
코드 예시
cpp
#include <afxwin.h> // MFC 기본 헤더
#include <log4cpp/Category.hh>
#include <log4cpp/Appender.hh>
#include <log4cpp/PatternLayout.hh>
#include <log4cpp/FileAppender.hh>
#include <log4cpp/ConsoleAppender.hh>
class CMyApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
CMyApp theApp;
BOOL CMyApp::InitInstance()
{
// Log4Cpp 설정
log4cpp::PatternLayout* pLayout = new log4cpp::PatternLayout();
pLayout->setConversionPattern("%d{%y-%m-%d %H:%M:%S} [%p] %m%n");
// 파일 appender 설정
log4cpp::FileAppender* pFileAppender = new log4cpp::FileAppender("FileAppender", "logfile.log");
pFileAppender->setLayout(pLayout);
// 콘솔 appender 설정
log4cpp::ConsoleAppender* pConsoleAppender = new log4cpp::ConsoleAppender("ConsoleAppender", pLayout);
// 카테고리 설정
log4cpp::Category& root = log4cpp::Category::getRoot();
root.addAppender(pFileAppender);
root.addAppender(pConsoleAppender);
root.setPriority(log4cpp::Priority::DEBUG); // 로그 수준 설정 (DEBUG, INFO, WARN, ERROR, FATAL)
// 로그 예시
root.debug("디버그 메시지");
root.info("정보 메시지");
root.warn("경고 메시지");
root.error("오류 메시지");
root.fatal("치명적인 오류 메시지");
return TRUE;
}
[사용법]
- 패턴 레이아웃 (Pattern Layout):
- 로그 메시지의 형식을 지정합니다. 위 예시에서는 로그 메시지에 날짜와 시간, 로그 레벨, 메시지를 포함하도록 설정합니다. "%d{%y-%m-%d %H:%M:%S} [%p] %m%n"은 2024-11-09 12:34:56 [DEBUG] 디버그 메시지와 같은 형식으로 로그를 출력합니다.
- 파일 Appender (FileAppender):
- 로그를 파일에 저장하는 설정입니다. 위 예시에서는 logfile.log라는 파일에 로그를 저장하도록 설정했습니다.
- 콘솔 Appender (ConsoleAppender):
- 로그를 콘솔에 출력하는 설정입니다. 콘솔에서 실시간으로 로그를 확인할 수 있습니다.
- 로그 우선순위 (Log Priority):
- log4cpp::Priority::DEBUG와 같이 로그의 우선순위를 설정할 수 있습니다. 우선순위에 따라, 해당 우선순위 이상의 메시지만 출력됩니다.
- 예를 들어, DEBUG 우선순위에서는 DEBUG, INFO, WARN, ERROR, FATAL 메시지가 모두 출력되며, INFO에서는 INFO, WARN, ERROR, FATAL 메시지만 출력됩니다.
- 로그 기록:
- 로그 기록은 root.debug(), root.info(), root.warn(), root.error(), root.fatal() 등을 사용하여 로그 메시지를 기록
4. 실행 결과
위 예시 코드가 실행되면, 콘솔과 logfile.log 파일에 다음과 같은 로그가 출력됩니다:
2024-11-09 12:34:56 [DEBUG] 디버그 메시지
2024-11-09 12:34:56 [INFO] 정보 메시지
2024-11-09 12:34:56 [WARN] 경고 메시지
2024-11-09 12:34:56 [ERROR] 오류 메시지
2024-11-09 12:34:56 [FATAL] 치명적인 오류 메시지
5. 로깅 레벨과 성능
- 로그 레벨을 설정함으로써 필요한 로그만 출력할 수 있습니다. 예를 들어, INFO 레벨을 설정하면 DEBUG 메시지는 출력되지 않습니다.
- 성능 최적화를 위해, 로깅 레벨을 DEBUG로 설정하여 디버깅 메시지만 출력하고, 배포 버전에서는 INFO나 WARN으로 설정하여 불필요한 로그를 줄일 수 있습니다.