Logger

源码

#include <iostream>
#include <sstream>
#include <vector>

const int DEBUG = 0;
const int INFO = 1;
const int WARNING = 2;
const int ERROR = 3;
const int FATAL = 4;
const int NUM_SEVERITIES = 5;
const char *serveritys_[] = {"DEBUG", "INFO", "WARNING", "ERROR", "FATAL"};

using namespace std;

class Logger : public std::basic_ostringstream<char> {
    public:
    Logger(const char* fname, int line, int serverity);
    ~Logger();

    void GenerateLogMsg();

    private:
    const char* fname_;
    int line_;
    int serverity_;
};

Logger::Logger(const char* fname, int line, int serverity) {
    this->fname_ = fname;
    this->line_ = line;
    this->serverity_ = serverity;
}


Logger::~Logger() {
    GenerateLogMsg();
}

#define _LOG_FATAL Logger(__FILE__, __LINE__, FATAL)
#define _LOG_DEBUG Logger(__FILE__, __LINE__, DEBUG)
#define _LOG_ERROR Logger(__FILE__, __LINE__, ERROR)
#define _LOG_INFO Logger(__FILE__, __LINE__, INFO)
#define _LOG_WARNING Logger(__FILE__, __LINE__, WARNING)
#define LOG(serverity) _LOG_##serverity

void Logger::GenerateLogMsg() {
    fprintf(stderr, "[%s:%d] [%s] %s\n", fname_, line_, serveritys_[serverity_], str().c_str());
}

int main() {
    LOG(DEBUG) << "HELLO LOG";
    return 0;
}

运行

$ g++ 22.cpp -std=c++17 && ./a.out 
[22.cpp:51] [DEBUG] HELLO LOG

最后更新于

这有帮助吗?