c语言编程笔录

首页 > C语言 > c语言

c语言

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++模板和流操作,使得代码具有较好的灵活性和扩展性。