LAPTOP-SNT8I5JK\Boounion
2024-12-02 aedb3b85fed48cb2cf0abb5fafa8e7591644c9f4
SourceCode/Bond/BondEq/DBManager/SystemLogManager.h
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
#ifndef SYSTEM_LOG_MANAGER_H
#define SYSTEM_LOG_MANAGER_H
#include <string>
#include <vector>
#include <mutex>
#include "Database.h"
// ç³»ç»Ÿæ—¥å¿—管理类
class SystemLogManager {
public:
    // æ—¥å¿—类型定义
    enum class LogType {
        Info,
        Error,
        Operation,
        Unknown
    };
    // èŽ·å–å•ä¾‹å®žä¾‹
    static SystemLogManager& getInstance();
    // è®¾ç½®æ•°æ®åº“连接
    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;
    // æ•°æ®åº“连接
    BL::Database* m_pDB = nullptr;
    // çº¿ç¨‹å®‰å…¨é”
    static std::mutex m_mutex;
};
#endif // SYSTEM_LOG_MANAGER_H