#pragma once #include #include #include #include namespace logs { class LogsPort { public: virtual ~LogsPort() = default; virtual void write(const QString& type, const QString& title, const QString& msg) = 0; virtual void information(const QString& title, const QString& msg) = 0; virtual void warning(const QString& title, const QString& msg) = 0; virtual void error(const QString& title, const QString& msg) = 0; virtual void flush(bool fouce = false) = 0; }; class LogsOutput : public LogsPort { public: LogsOutput(const QDir& target, int cache_size = 200); // ͨ¹ý LogsPort ¼Ì³Ð void write(const QString& type, const QString& title, const QString& msg) override; void information(const QString& title, const QString& msg) override; void warning(const QString& title, const QString& msg) override; void error(const QString& title, const QString& msg) override; virtual void flush(bool fouce = false); private: QMutex _mutex; int _cache_size; std::shared_ptr _target_file; QList _message_buffer; }; }