#include "Logger.h"
#include "nkcWinUtils.h"
const char* Logger::DATA_LOG_FILE = LOG_DIR "%s_%s_%d.csv";
const TCHAR* Logger::EVENT_LOG_FILE = _T(LOG_DIR "events.txt");
// コンストラクタ
Logger::Logger()
: _logFileName(_T(""))
{
}
// ログを追記
bool Logger::Append(const TCHAR* filename, const TCHAR* msg) {
if (_tcslen(filename) < 1) return false;
FILE* fp = NULL;
if (_tfopen_s(&fp, filename, _T("a")) != 0) {
nkc::wut::DebugPrintf(_T("Can't open data log file.\n"));
return false;
}
_ftprintf(fp, msg);
fclose(fp);
return true;
}
// データログ開始
void Logger::StartRecord(std::string subject, int visit) {
CreateDirectory(_T(LOG_DIR), NULL);
_logFileName = nkc::wut::Multi2Wide(
cv::format(DATA_LOG_FILE, nkc::wut::DateTimeStr().c_str(), subject.c_str(), visit));
nkc::wut::DebugPrintf(_T("Log start: %s\n"), _logFileName.c_str());
TCHAR msg[1024];
_stprintf_s(msg, 1024, _T("time,stimNo,sceneNo,stimTime,gazeVx,gazeVy,shiftX,shiftY,"
"gazeIx,gazeIy,target,contact time,Feedback,TrainLevel,RR,pupilR,pupilL,"
"H11,H12,H13,H21,H22,H23,H31,H32,H33\n"));
Append(_logFileName.c_str(), msg);
}
// データログ出力
void Logger::WriteRecord(Record& r) {
_Records.push_back(r);
double* ptr = r.H.ptr<double>(0);
TCHAR msg[1024];
_stprintf_s(msg, 1024, _T("%.3f,%d,%d,%.3f,%.1f,%.1f,%.1f,%.1f"
",%.1f,%.1f,%d,%.2f,%d,%d,%d,%.1f,%.1f,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf\n"),
r.ElapTime, r.StimNo, r.SceneNo, r.SceneTime, r.GazeV.x, r.GazeV.y, r.Shift.x, r.Shift.y,
r.GazeI.x, r.GazeI.y, r.Target, r.ContactTime, r.Feedback, r.TrainingLevel,
r.RR, r.PupilR, r.PupilL, *ptr, *(ptr + 1), *(ptr + 2), *(ptr + 3), *(ptr + 4),
*(ptr + 5), *(ptr + 6), *(ptr + 7), *(ptr + 8));
Append(_logFileName.c_str(), msg);
}
// イベントログ出力
void Logger::WriteEvent(const TCHAR* msg) {
CreateDirectory(_T(LOG_DIR), NULL);
if (_tcslen(msg) < 1) {
Append(EVENT_LOG_FILE, _T("\n"));
} else {
std::wstring datestr = nkc::wut::Multi2Wide(nkc::wut::DateTimeStr());
TCHAR msgOut[1024];
_stprintf_s(msgOut, 1024, _T("%s %s\n"), datestr.c_str(), msg);
Append(EVENT_LOG_FILE, msgOut);
nkc::wut::DebugPrintf(msgOut);
}
}
// ログ停止
void Logger::Stop() {
_logFileName = _T("");
}