首先定义日志级别枚举,再通过单例Logger类封装输出逻辑,支持控制台和文件双端输出,结合互斥锁保证线程安全,使用宏实现简洁调用,最终实现带时间戳、级别过滤和多目标输出的基础日志系统。

实现一个简单的C++日志系统,关键在于封装输出逻辑、支持不同日志级别、线程安全和可扩展性。下面是一个基础但实用的日志系统实现方法。
定义日志级别
首先定义常见的日志级别,便于控制输出信息的详细程度:
enum class LogLevel { DEBUG, INFO, WARNING, ERROR};
封装日志类
创建一个单例风格的Logger类,管理日志输出目标(如控制台或文件)和当前级别过滤:
#include #include #include #include #include class Logger {public: static Logger& instance() { static Logger logger; return logger; } void setLevel(LogLevel level) { m_level = level; } void setFileOutput(const std::string& filename) { m_file.open(filename, std::ios::app); } void log(LogLevel level, const std::string& msg) { if (level < m_level) return; std::lock_guard lock(m_mutex); std::time_t now = std::time(nullptr); char timeStr[64]; std::strftime(timeStr, sizeof(timeStr), "%Y-%m-%d %H:%M:%S", std::localtime(&now)); std::string levelStr[] = {"DEBUG", "INFO", "WARNING", "ERROR"}; std::string line = "[" + std::string(timeStr) + "] [" + levelStr[static_cast(level)] + "] " + msg + "n"; std::cout << line; if (m_file.is_open()) { m_file << line; m_file.flush(); } }private: Logger() : m_level(LogLevel::DEBUG) {} ~Logger() { if (m_file.is_open()) m_file.close(); } LogLevel m_level; std::ofstream m_file; std::mutex m_mutex;};
提供便捷宏接口
使用宏简化调用,自动传入级别并支持流式写法:
立即学习“C++免费学习笔记(深入)”;
#define LOG_DEBUG(msg) Logger::instance().log(LogLevel::DEBUG, msg)#define LOG_INFO(msg) Logger::instance().log(LogLevel::INFO, msg)#define LOG_WARN(msg) Logger::instance().log(LogLevel::WARNING, msg)#define LOG_ERROR(msg) Logger::instance().log(LogLevel::ERROR, msg)
使用示例
在main函数中设置日志行为并输出信息:
int main() { Logger::instance().setLevel(LogLevel::INFO); Logger::instance().setFileOutput("app.log"); LOG_DEBUG("This won't show"); // 被级别过滤 LOG_INFO("Program started"); LOG_WARN("Something unusual happened"); LOG_ERROR("A critical error occurred"); return 0;}
这样就实现了基本功能:时间戳、级别控制、控制台与文件双输出、线程安全。后续可扩展格式化、异步写入、滚动文件等功能。
基本上就这些,不复杂但容易忽略细节。
以上就是c++++怎么实现一个简单的日志系统_c++日志系统实现方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1478467.html
微信扫一扫
支付宝扫一扫