1. Install the TOAST SDK 2. TOAST 콘솔에서 Log & Crash Search를 활성화합니다. 3. Log & Crash Search에서 AppKey를 확인합니다.
Log & Crash Search에서 발급받은 AppKey를 ProjectKey로 설정합니다.
...
#include "toast/ToastLogger.h"
using namespace toast::logger;
...
ToastLogger* logger = GetToastLogger();
ToastLoggerConfiguration* loggerConf = GetToastLoggerConfiguration();
...
loggerConf->setProjectKey(appkey);
loggerConf->setProjectVersion(version);
...
if (_logger != NULL)
{
if (_logger->initialize(loggerConf))
{
// success
}
else
{
// fail
}
}
DestroyToastLogger();
ToastSDK에 사용자 ID를 설정할 수 있습니다. 설정한 UserID는 ToastSDK의 각 모듈에서 공통으로 사용됩니다. ToastLogger의 로그 전송 API를 호출할 때마다 설정한 사용자 ID를 로그와 함께 서버로 전송합니다.
ToastLogger* _logger = GetToastLogger();
_logger->setUserId("userId");
_logger->initialize(loggerConf);
_logger->getUserId();
TOAST Logger는 5가지 레벨의 로그 전송 함수를 제공합니다.
// 일반 로그
_logger->log(level, message, _userFieldMap);
// DEBUG 레벨 로그
_logger->debug(level, message, _userFieldMap);
// INFO 레벨 로그
_logger->info(level, message, _userFieldMap);
// WARN 레벨 로그
_logger->warn(String message);
// ERROR 레벨 로그
_logger->error(String message);
// FATAL 레벨 로그
_logger->fatal(String message);
ToastLoggerUserFields* _userFieldMap = CreateToastLoggerUserFields();
_userFieldMap->insert(key, value);
if (_userFieldMap != NULL)
{
if (_userFieldMap->size() > 0)
{
_logger->log(level, message, _userFieldMap);
}
else
{
_logger->log(level, message);
}
}
ToastLoggerUserFields는 아래와 같은 함수를 지원합니다.
사용자 정의 필드는 Log & Crash Search > 로그 검색을 클릭한 후 로그 검색 화면의 선택한 필드에 표시되는 값과 같습니다.
_logger->addUserField("nickname", "randy");
_logger->removeUserField("nickname");
_logger->cleareUserField();
크래시 리포터(CrashRepoter.exe)는 크래시 정보를 로그로 전송하는 기능을 제공합니다. 크래시가 발생하면 크래시 리포터에서 크래시 정보를 로그로 전송합니다. ToastLogger를 초기화할 때 크래시 리포터 사용 여부를 설정할 수 있습니다. 크래시 리포터 대화 상자 사용 여부 및 커스텀 메시지를 설정할 수 있습니다.
...
#include "toast/ToastLogger.h"
using namespace toast::logger;
...
ToastLogger* _logger = GetToastLogger();
ToastLoggerConfiguration* loggerConf = GetToastLoggerConfiguration();
...
// 크래시 로그 활성화 여부
loggerConf->enableCrashReporter(true);
// 크래시 리포터 다이얼로그 사용 여부
loggerConf->enableSilenceMode(false);
// 크래시 리포터 다이얼로그에 보일 메시지 정의
// (정의하지 않으면 기본 메시지가 보이게 됩니다.)
loggerConf->setCrashReporterMessage(TOAST_LANGUAGE_KOREAN, "오류가 발생한 상황...\n");
...
if (_logger != NULL)
{
bool bInit = _logger->initialize(loggerConf);
// x86에서 pure virtual call / invalid paramenter 크래시 로그 추가
if (bInit && enableCrashReport)
{
#ifndef _WIN64
SetCrashHandler();
#endif
}
}
void CsampleDlg::OnBnClickedCrash()
{
// TODO: Add your control notification handler code here
int *i = reinterpret_cast<int*>(0x45);
*i = 5;
}
TOAST Windows SDK에서 발생한 크래시를 해석하려면 심벌 파일을 생성해 웹 콘솔에 업로드해야 합니다.
dump_syms sample.pdb > sample.sym