C++ Log日志类轻量级支持格式化输出变量实现代码
更新时间:2023-08-13前言
Log日志是软件开发中非常重要的一部分,它可以用来记录应用程序的运行状态、调试信息和错误消息等。在C++中,我们可以通过设计和实现一个轻量级的Log日志类来实现这个功能。
代码实现
#include#include #include #include #include class Log { public: Log(const std::string& filename) { m_file.open(filename, std::fstream::out | std::fstream::app); } ~Log() { if (m_file.is_open()) { m_file.close(); } } template void log(const T& message) { if (m_file.is_open()) { std::time_t now = std::time(nullptr); std::tm* now_tm = std::localtime(&now); char time_buffer[20]; std::strftime(time_buffer, sizeof(time_buffer), "%Y-%m-%d %H:%M:%S", now_tm); std::ostringstream oss; oss << "[" << time_buffer << "] " << message << std::endl; m_file << oss.str(); } } private: std::ofstream m_file; };
上述代码中,我们定义了一个Log类,它的构造函数接收一个文件名作为参数,用于指定日志输出文件。
在log函数中,我们使用模板,使得它可以接受任意类型的消息,并将消息按照一定的格式写入到日志文件中。首先,我们使用std::time函数获取当前时间,并使用std::localtime函数将其转换为本地时间结构。然后,我们使用std::strftime函数将时间格式化为"YYYY-MM-DD HH:MM:SS"的字符串形式。接下来,我们使用std::ostringstream类将时间和消息拼接为一行,并写入到日志文件中。
代码用途和规范
Log日志类可以方便地用于记录应用程序的运行状态和调试信息,可以帮助开发人员快速定位问题和进行故障排除。
使用Log类的规范如下:
- 首先,需要包含Log类的头文件。
- 在需要使用Log功能的地方,创建一个Log对象,并指定日志文件的名称。
- 调用log函数,传入需要记录的消息。
- 当不再需要使用Log功能时,Log对象会自动关闭日志文件。
总结
以上是一个轻量级支持格式化输出变量的Log日志类的实现代码。通过使用这个Log类,我们可以方便地在应用程序中记录和输出各种类型的日志信息,并进行定位和排查问题。在设计和实现Log类时,我们使用了C++模板和流操作,使得代码具有较好的灵活性和扩展性。