mirror of
https://github.com/yuanyuanxiang/SimpleRemoter.git
synced 2026-01-21 23:13:08 +08:00
Revert ac2480c9: Copy and run client program in ProgramData
Fix: Run as Windows service will fail due to ac2480c9
Improve: Don't check date because trail has been removed
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
#pragma warning(disable: 4996)
|
||||
#ifdef _WIN32
|
||||
#ifdef _WINDOWS
|
||||
@@ -35,7 +35,7 @@ public:
|
||||
InfoLevel, WarningLevel, ErrorLevel
|
||||
};
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
// 单例模式
|
||||
static Logger& getInstance()
|
||||
{
|
||||
static Logger instance;
|
||||
@@ -43,11 +43,13 @@ public:
|
||||
char buf[16] = {};
|
||||
sprintf_s(buf, "%d", GetCurrentProcessId());
|
||||
instance.pid = buf;
|
||||
// SYSTEM | C:\Windows\Temp
|
||||
// 普通用户 | C:\Users\用户名\AppData\Local\Temp
|
||||
char logPath[MAX_PATH] = { 0 };
|
||||
GetEnvironmentVariableA("TEMP", logPath, MAX_PATH);
|
||||
instance.InitLogFile(logPath, instance.pid);
|
||||
#ifdef _WINDOWS
|
||||
instance.enable = true; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־Ĭ<EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD>
|
||||
instance.enable = true; // 主控日志默认打开
|
||||
#else
|
||||
char var[32] = {};
|
||||
const char* name = skCrypt("ENABLE_LOG");
|
||||
@@ -59,24 +61,24 @@ public:
|
||||
return instance;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
// 禁止拷贝和赋值
|
||||
Logger(const Logger&) = delete;
|
||||
Logger& operator=(const Logger&) = delete;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
|
||||
// 设置日志文件名
|
||||
void setLogFile(const std::string& filename)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(fileMutex);
|
||||
logFileName = filename;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
||||
// 启用日志
|
||||
void usingLog(bool b = true)
|
||||
{
|
||||
enable = b;
|
||||
}
|
||||
|
||||
// д<EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD> printf <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
|
||||
// 写日志,支持 printf 格式化
|
||||
void log(const char* file, int line, const char* format, ...)
|
||||
{
|
||||
va_list args;
|
||||
@@ -105,16 +107,16 @@ public:
|
||||
printf("%s", logEntry.c_str());
|
||||
#endif
|
||||
#endif
|
||||
cv.notify_one(); // ֪ͨд<EFBFBD>߳<EFBFBD>
|
||||
cv.notify_one(); // 通知写线程
|
||||
}
|
||||
|
||||
// ֹͣ<EFBFBD><EFBFBD>־ϵͳ
|
||||
// 停止日志系统
|
||||
void stop()
|
||||
{
|
||||
if (!running) return;
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(queueMutex);
|
||||
running = false; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
running = false; // 设置运行状态
|
||||
}
|
||||
cv.notify_one();
|
||||
if (workerThread.joinable()) {
|
||||
@@ -128,7 +130,7 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
// <EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 日志按月份起名
|
||||
void InitLogFile(const std::string & dir, const std::string& pid)
|
||||
{
|
||||
time_t currentTime = time(nullptr);
|
||||
@@ -143,16 +145,16 @@ private:
|
||||
#endif
|
||||
logFileName = dir + fileName;
|
||||
}
|
||||
std::string logFileName; // <EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
|
||||
bool enable; // <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool threadRun; // <EFBFBD><EFBFBD>־<EFBFBD>߳<EFBFBD>״̬
|
||||
std::queue<std::string> logQueue; // <EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::mutex queueMutex; // <EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::condition_variable cv; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::atomic<bool> running; // <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::thread workerThread; // <EFBFBD><EFBFBD>̨<EFBFBD>߳<EFBFBD>
|
||||
std::mutex fileMutex; // <EFBFBD>ļ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::string pid; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
|
||||
std::string logFileName; // 日志文件名
|
||||
bool enable; // 是否启用
|
||||
bool threadRun; // 日志线程状态
|
||||
std::queue<std::string> logQueue; // 日志队列
|
||||
std::mutex queueMutex; // 队列互斥锁
|
||||
std::condition_variable cv; // 条件变量
|
||||
std::atomic<bool> running; // 是否运行
|
||||
std::thread workerThread; // 后台线程
|
||||
std::mutex fileMutex; // 文件写入锁
|
||||
std::string pid; // 进程ID
|
||||
|
||||
Logger() : enable(false), threadRun(false), running(true), workerThread(&Logger::processLogs, this) {}
|
||||
|
||||
@@ -161,7 +163,7 @@ private:
|
||||
stop();
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD>̨<EFBFBD>̴߳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
||||
// 后台线程处理日志
|
||||
void processLogs()
|
||||
{
|
||||
threadRun = true;
|
||||
@@ -176,7 +178,7 @@ private:
|
||||
logQueue.pop();
|
||||
lock.unlock();
|
||||
|
||||
// д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD>
|
||||
// 写入日志文件
|
||||
writeToFile(logEntry);
|
||||
|
||||
lock.lock();
|
||||
@@ -186,7 +188,7 @@ private:
|
||||
threadRun = false;
|
||||
}
|
||||
|
||||
// д<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
// 写入文件
|
||||
void writeToFile(const std::string& logEntry)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(fileMutex);
|
||||
@@ -196,7 +198,7 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ǰʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 获取当前时间戳
|
||||
std::string getCurrentTimestamp()
|
||||
{
|
||||
auto now = std::chrono::system_clock::now();
|
||||
@@ -204,9 +206,9 @@ private:
|
||||
|
||||
std::tm tm;
|
||||
#ifdef _WIN32
|
||||
localtime_s(&tm, &in_time_t); // Windows <EFBFBD><EFBFBD>ȫ<EFBFBD>汾
|
||||
localtime_s(&tm, &in_time_t); // Windows 安全版本
|
||||
#else
|
||||
localtime_r(&in_time_t, &tm); // POSIX <EFBFBD><EFBFBD>ȫ<EFBFBD>汾
|
||||
localtime_r(&in_time_t, &tm); // POSIX 安全版本
|
||||
#endif
|
||||
|
||||
std::stringstream ss;
|
||||
@@ -214,7 +216,7 @@ private:
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>Ϊ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
|
||||
// 将日志级别转换为字符串
|
||||
std::string logLevelToString(LogLevel level)
|
||||
{
|
||||
switch (level) {
|
||||
@@ -229,7 +231,7 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
|
||||
// 格式化字符串
|
||||
std::string formatString(const char* format, va_list args)
|
||||
{
|
||||
char buffer[1024];
|
||||
|
||||
Reference in New Issue
Block a user