mirror of
https://github.com/gnif/LookingGlass.git
synced 2025-10-12 10:28:08 +00:00
[idd] debug: use better log path determination algorithm
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
#include <stdio.h>
|
||||
#include <malloc.h>
|
||||
#include <strsafe.h>
|
||||
#include <shlobj.h>
|
||||
|
||||
#include "CDebug.h"
|
||||
|
||||
@@ -99,19 +100,35 @@ inline static void iso8601(wchar_t *buf, size_t count)
|
||||
wcsftime(buf, count, L"%Y-%m-%d %H:%M:%SZ", &utc);
|
||||
}
|
||||
|
||||
inline static std::wstring getLogPath() {
|
||||
PWSTR pszPath;
|
||||
if (FAILED(SHGetKnownFolderPath(FOLDERID_ProgramData, 0, NULL, &pszPath)))
|
||||
{
|
||||
DEBUG_ERROR("Failed to get ProgramData path");
|
||||
return L"";
|
||||
}
|
||||
|
||||
std::wstring result(pszPath);
|
||||
CoTaskMemFree(pszPath);
|
||||
|
||||
result += L"\\Looking Glass (IDD)\\";
|
||||
return result;
|
||||
}
|
||||
|
||||
void CDebug::Init(const wchar_t * name)
|
||||
{
|
||||
m_logDir = getLogPath();
|
||||
|
||||
// don't redirect the debug output if running under a debugger
|
||||
if (IsDebuggerPresent())
|
||||
return;
|
||||
|
||||
std::wstring folder = L"C:\\ProgramData\\Looking Glass (IDD)\\";
|
||||
std::wstring baseName = name;
|
||||
std::wstring ext = L".txt";
|
||||
std::wstring logFile = folder + baseName + ext;
|
||||
std::wstring logFile = m_logDir + baseName + ext;
|
||||
|
||||
//rotate out old logs
|
||||
DeleteFileW((folder + baseName + L".4" + ext).c_str());
|
||||
DeleteFileW((m_logDir + baseName + L".4" + ext).c_str());
|
||||
for (int i = 3; i >= 0; --i)
|
||||
{
|
||||
std::wstring oldPath;
|
||||
@@ -120,12 +137,12 @@ void CDebug::Init(const wchar_t * name)
|
||||
if (i == 0)
|
||||
{
|
||||
oldPath = logFile;
|
||||
newPath = folder + baseName + L".1" + ext;
|
||||
newPath = m_logDir + baseName + L".1" + ext;
|
||||
}
|
||||
else
|
||||
{
|
||||
oldPath = folder + baseName + L"." + std::to_wstring(i) + ext;
|
||||
newPath = folder + baseName + L"." + std::to_wstring(i + 1) + ext;
|
||||
oldPath = m_logDir + baseName + L"." + std::to_wstring(i) + ext;
|
||||
newPath = m_logDir + baseName + L"." + std::to_wstring(i + 1) + ext;
|
||||
}
|
||||
|
||||
MoveFileW(oldPath.c_str(), newPath.c_str());
|
||||
|
@@ -27,6 +27,7 @@ class CDebug
|
||||
{
|
||||
private:
|
||||
std::ofstream m_stream;
|
||||
std::wstring m_logDir;
|
||||
void Write(const wchar_t *line);
|
||||
|
||||
public:
|
||||
@@ -44,6 +45,7 @@ class CDebug
|
||||
LEVEL_MAX
|
||||
};
|
||||
|
||||
const wchar_t *logDir() { return m_logDir.c_str(); }
|
||||
void Init(const wchar_t * name);
|
||||
void Log_va(CDebug::Level level, const char *function, int line, const wchar_t *fmt, va_list args);
|
||||
void Log(CDebug::Level level, const char *function, int line, const wchar_t *fmt, ...);
|
||||
|
Reference in New Issue
Block a user