added files.
This commit is contained in:
commit
e908ab2355
353 files changed
+130515
No files matched your search
@@ -0,0 +1,93 @@
|
||||
#include "Logger.hpp"
|
||||
#include <cstdio>
|
||||
#include <vector>
|
||||
|
||||
namespace SlinkyNative {
|
||||
|
||||
CRITICAL_SECTION Logger::s_CriticalSection;
|
||||
std::wstring Logger::s_LogFilePath;
|
||||
bool Logger::s_Initialized = false;
|
||||
|
||||
void Logger::Initialize(HMODULE hModule) {
|
||||
if (s_Initialized) return;
|
||||
InitializeCriticalSection(&s_CriticalSection);
|
||||
|
||||
wchar_t modulePath[MAX_PATH] = { 0 };
|
||||
if (GetModuleFileNameW(hModule, modulePath, MAX_PATH) > 0) {
|
||||
wchar_t* lastSlash = wcsrchr(modulePath, L'\\');
|
||||
if (lastSlash) {
|
||||
*lastSlash = L'\0';
|
||||
s_LogFilePath = std::wstring(modulePath) + L"\\slinky-native.log";
|
||||
}
|
||||
}
|
||||
|
||||
if (s_LogFilePath.empty()) {
|
||||
wchar_t tempPath[MAX_PATH] = { 0 };
|
||||
GetTempPathW(MAX_PATH, tempPath);
|
||||
s_LogFilePath = std::wstring(tempPath) + L"slinky-native.log";
|
||||
}
|
||||
|
||||
s_Initialized = true;
|
||||
}
|
||||
|
||||
void Logger::Shutdown() {
|
||||
if (!s_Initialized) return;
|
||||
DeleteCriticalSection(&s_CriticalSection);
|
||||
s_Initialized = false;
|
||||
}
|
||||
|
||||
const std::wstring& Logger::GetLogFilePath() {
|
||||
return s_LogFilePath;
|
||||
}
|
||||
|
||||
void Logger::Log(const wchar_t* format, ...) {
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
LogV(format, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void Logger::LogV(const wchar_t* format, va_list args) {
|
||||
if (!s_Initialized) return;
|
||||
|
||||
SYSTEMTIME st;
|
||||
GetLocalTime(&st);
|
||||
|
||||
wchar_t messageBuf[2048] = { 0 };
|
||||
vswprintf_s(messageBuf, format, args);
|
||||
|
||||
wchar_t lineBuf[2560] = { 0 };
|
||||
swprintf_s(lineBuf, L"[%04u-%02u-%02u %02u:%02u:%02u.%03u] %ls\n",
|
||||
st.wYear, st.wMonth, st.wDay,
|
||||
st.wHour, st.wMinute, st.wSecond, st.wMilliseconds,
|
||||
messageBuf);
|
||||
|
||||
EnterCriticalSection(&s_CriticalSection);
|
||||
|
||||
// Also output to debug string for debugger attach
|
||||
OutputDebugStringW(lineBuf);
|
||||
|
||||
// Write to slinky-native.log
|
||||
FILE* fp = nullptr;
|
||||
if (_wfopen_s(&fp, s_LogFilePath.c_str(), L"a, ccs=UTF-8") == 0 && fp) {
|
||||
fputws(lineBuf, fp);
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
LeaveCriticalSection(&s_CriticalSection);
|
||||
}
|
||||
|
||||
void Logger::LogA(const char* format, ...) {
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
|
||||
char charBuf[2048] = { 0 };
|
||||
vsprintf_s(charBuf, format, args);
|
||||
va_end(args);
|
||||
|
||||
wchar_t wideBuf[2048] = { 0 };
|
||||
MultiByteToWideChar(CP_UTF8, 0, charBuf, -1, wideBuf, 2048);
|
||||
Log(L"%ls", wideBuf);
|
||||
}
|
||||
|
||||
} // namespace SlinkyNative
|
||||
Reference in new issue
Block a user