mrDarker
2025-10-22 e8a27bb203fe2aff70390a5eca002d7438da9b0f
SourceCode/Bond/BondEq/DBManager/SystemLogManager.h
@@ -2,50 +2,72 @@
#define SYSTEM_LOG_MANAGER_H
#include <string>
#include <memory>
#include <vector>
#include <mutex>
#include <chrono>
#include "Database.h"
// 系统日志管理类
class SystemLogManager {
public:
    // 日志类型定义
    enum class LogType {
        Info,     // 信息日志
        Error,    // 错误日志
        Operation // 操作日志
        Info,
        Error,
        Operation,
        Unknown
    };
    // 获取单例实例
    static SystemLogManager& getInstance();
    // 设置数据库连接
    void setDatabase(std::unique_ptr<BL::Database>& db);
    // 添加日志
    bool log(LogType logType, const std::string& event, const std::string& username = "SYSTEM");
   // 获取日志
    std::vector<std::vector<std::string>> SystemLogManager::getLogs(int startPosition = -1, int count = -1);
    void setDatabase(BL::Database* db);
    // 初始化日志表
    bool initializeLogTable();
    // 添加日志
    bool log(LogType logType, const std::string& event);
    bool log(LogType logType, const std::string& event, const std::string& username);
    // 获取日志内容
    std::vector<std::vector<std::string>> getLogs(int startPosition = -1, int count = -1);
    // 获取筛选后的日志数据
    std::vector<std::vector<std::string>> getFilteredLogs(
        const std::string& logType,
        const std::string& username,
        const std::string& description,
        const std::string& startTime,
        const std::string& endTime,
        int pageNumber,
        int pageSize);
    // 获取符合条件的日志总数
    int getTotalLogCount(
        const std::string& logType,
        const std::string& username,
        const std::string& description,
        const std::string& startTime,
        const std::string& endTime);
    // 清理超过指定天数的旧日志
    void cleanOldLogs(int daysToKeep = 30);
    // 转换日志类型为字符串
    static std::string logTypeToString(LogType logType);
private:
    // 构造函数(私有化)
    // 构造函数和析构函数
    SystemLogManager();
    ~SystemLogManager();
    // 禁止拷贝和赋值
    SystemLogManager(const SystemLogManager&) = delete;
    SystemLogManager& operator=(const SystemLogManager&) = delete;
    // 转换日志类型为字符串
    std::string logTypeToString(LogType logType) const;
    // 数据库连接
    std::unique_ptr<BL::Database>* m_pDB;
    // 单例实例
    static std::unique_ptr<SystemLogManager> m_instance;
    BL::Database* m_pDB = nullptr;
    // 线程安全锁
    static std::mutex m_mutex;