본문 바로가기
C / C++ / Win32 / MFC

Log4C / Log4Cpp / Log4++ MFC 프로젝트에 설정

by ahnshy 2024. 11. 10.

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 파일을 링크해야 합니다. 아래 단계를 따르세요.

  1. 프로젝트 속성을 열고 링커 -> 입력 -> 추가 종속성에 log4cpp.lib를 추가합니다.
  2. C/C++ -> 일반 -> 추가 포함 디렉터리에 Log4Cpp 헤더 파일이 있는 디렉터리를 추가합니다.
  3. 링커 -> 일반 -> 추가 라이브러리 디렉터리에 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;
}

[사용법]

  1. 패턴 레이아웃 (Pattern Layout):
    •  로그 메시지의 형식을 지정합니다. 위 예시에서는 로그 메시지에 날짜와 시간, 로그 레벨, 메시지를 포함하도록 설정합니다. "%d{%y-%m-%d %H:%M:%S} [%p] %m%n"은 2024-11-09 12:34:56 [DEBUG] 디버그 메시지와 같은 형식으로 로그를 출력합니다.
  2. 파일 Appender (FileAppender):
    •  로그를 파일에 저장하는 설정입니다. 위 예시에서는 logfile.log라는 파일에 로그를 저장하도록 설정했습니다.
  3. 콘솔 Appender (ConsoleAppender):
    •  로그를 콘솔에 출력하는 설정입니다. 콘솔에서 실시간으로 로그를 확인할 수 있습니다.
  4. 로그 우선순위 (Log Priority):
    •  log4cpp::Priority::DEBUG와 같이 로그의 우선순위를 설정할 수 있습니다. 우선순위에 따라, 해당 우선순위 이상의 메시지만 출력됩니다.
    •  예를 들어, DEBUG 우선순위에서는 DEBUG, INFO, WARN, ERROR, FATAL 메시지가 모두 출력되며, INFO에서는 INFO, WARN, ERROR, FATAL 메시지만 출력됩니다.
  5. 로그 기록:
    •  로그 기록은 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으로 설정하여 불필요한 로그를 줄일 수 있습니다.