#ifndef LXZL_LOGL_H #define LXZL_LOGL_H /** * 日志生成模块 * 目标:支持同步、异步两种方式;支持多种输出方式(控制台、文件、udp、tcp) */ #include "UDP.h" #include #include #include #include #include enum LogType{ LTStd,//日志输出到控制台 LTTxt,//日志输出到文本文件 LTUdp,//日志输出到UDP LTTcp,//日志输出到TCP }; enum LogLevel{ LLDebug,//调试 LLInfo,//一般 LLWarn,//警告 LLError,//错误 }; class LogL { public: /** * 日志构造函数 * @param logType 日志输出类型 * @param isSync true:同步/false:异步 * @param logPath 输出地址(LTStd:无;LTTxt:填写路径;LTUdp:填写ip端口) */ explicit LogL(LogType logType, bool isSync = true, std::string logPath = ""); ~LogL(); /** * 调试日志 * @param str 日志内容 */ void debug(const std::string &str); void info(const std::string &str); void warn(const std::string &str); void error(const std::string &str); private: void logThread(); void log(const std::string &str, LogLevel level); private: std::thread *m_thread; bool m_thread_run; bool m_isSync;//是否同步 LogType m_logType;//输出类型 std::string m_logPath;//输出地址 std::queue m_log_queue;//日志容器 std::mutex m_mtx; std::condition_variable m_cond_empty;//空时停止 std::condition_variable m_cond_full;//满时停止 std::ofstream *m_file; int32_t m_today; UDPSender *m_sender; }; /** * 创建目录 * @param path 路径 * @return bool是否创建成功 */ bool myMkdir(const char *path); /** * 获取当前日期时间 */ class myDateTime { public: myDateTime(); int32_t year; int32_t month; int32_t day; int32_t hour; int32_t minute; int32_t second; std::string toDate() const; std::string toTime() const; std::string toDateTime() const; }; #endif //LXZL_LOGL_H