작업중인 프로젝트의 로그 파일 시스템에 약간의 기능을 추가하고 싶습니다. 내 LogError()
호출에 대해 오류가 발생한 함수를 포함하고 싶습니다. LogError()
이라는 함수의 이름에 액세스 할 수있는 방법이 있는지 궁금해서 프로그래밍 방식으로 해당 정보에 액세스하여 로그에 추가 할 수 있습니다. .프로그래밍 방식으로 호출하는 함수의 이름에 액세스 할 수 있습니까?
bool Engine::GraphicsManager::Initialize(const HWND i_hWindow_main)
{
if (!InitializeWindow(i_hWindow_main))
{
Engine::LogManager::Instance().LogError(L"GraphicsManager::Initialize - Unable to initialize graphics window");
return false;
}
Engine::LogManager::Instance().LogMessage(L"Graphics window initialized successfully");
/* SNIP */
initialized = true;
return true;
}
, 나는 (적어도 일부) 그 함수의 이름 대신의 퍼팅이 GraphicsManager::Initialize()
출력에서 호출 된 것으로 판단 할 수 LogError()
싶습니다 : 예를 들어
손으로 도처에.
편집 : vfwprintf_s()
는 그래서 그들은 가변 길이 인수 목록을 취할 수에 대한 내 LogError()
기능 (다른 로깅 기능) 본질적으로 언급해야 래퍼. "매크로 사용"을 좋아하지만 잠재적 인 문제 (다른 질문 일 가능성이 있음)를 해결하는 방법을 모르겠습니다.
여전히이 /가 능니까?
감사합니다. 일부 수정이 와이드 문자
//support macros
#define WIDEN2(x) L ## x
#define WIDEN(x) WIDEN2(x)
#define STRINGIZE(x) #x
#define __WFILE__ WIDEN(__FILE__)
#define __WFUNCTION__ WIDEN(__FUNCTION__)
#define __WLINE__ WIDEN(STRINGIZE(__LINE__))
// logging macro
#define LOG(msg) Engine::LogManager::Instance().LogError(__WFILE__ L"::" __WFUNCTION__ L":" __WLINE__ L" - " msg)
이는 방식으로 작동이
if(error) { LOG(L"Error!"); }
로그
File.cpp::Function:Line - Error!
처럼 사용 다루는 :
내가 가변 길이 인수 목록을 처리 할 필요가 말을 내 원래의 게시물 업데이트 . 더 복잡한 작업을 위해 매크로를 사용하는 것에 익숙하지 않습니다. 추가 경고가 있으면이 작업을 수행 할 수 있습니까? – chaosTechnician
@chaosTechnician : 아무 것도 놓치지 않았다면 형식 인수 앞에 함수 이름 인수를 전달하면됩니다. 개인적으로 메시지 인수뿐만 아니라 유용한 정보 (줄 번호, 파일 이름)의 각 비트에 대한 인수를 전달합니다.로깅은 모든 것을 포맷팅합니다. –