C++ 如何将控制台(stdout)添加为g3log中的接收器?

C++ 如何将控制台(stdout)添加为g3log中的接收器?,c++,g2log,C++,G2log,我是新手。我编译并运行了我在repo中找到的一个示例,但无法对其进行修改,以便将日志消息打印到控制台,而不是文件。 示例中的以下行设置记录器: auto worker = g3::LogWorker::createLogWorker(); auto handle= worker->addDefaultLogger(argv[0], path_to_log_file); g3::initializeLogging(worker.get()); 中间的行设置日志的前缀,并给

我是新手。我编译并运行了我在repo中找到的一个示例,但无法对其进行修改,以便将日志消息打印到控制台,而不是文件。 示例中的以下行设置记录器:

   auto worker = g3::LogWorker::createLogWorker();
   auto handle= worker->addDefaultLogger(argv[0], path_to_log_file);
   g3::initializeLogging(worker.get());

中间的行设置日志的前缀,并给出应该创建日志文件的路径。 如何修改此代码以打印到控制台\控制台和文件

谢谢


Omer。

从g3log github实现您需要的彩色控制台输出:

struct ColorCoutSink {

// Linux xterm color
// http://stackoverflow.com/questions/2616906/how-do-i-output-coloured-text-to-a-linux-terminal

enum FG_Color {YELLOW = 33, RED = 31, GREEN=32, WHITE = 97};

    FG_Color GetColor(const LEVELS level) const 
    {
        if (level.value == WARNING.value) { return YELLOW; }
        if (level.value == DEBUG.value) { return GREEN; }
        if (g3::internal::wasFatal(level)) { return RED; }

        return WHITE;
    }

    void ReceiveLogMessage(g3::LogMessageMover logEntry)
    {
        auto level = logEntry.get()._level;
        auto color = GetColor(level);

        std::cout << "\033[" << color << "m" << logEntry.get().toString() << "\033[m" << std::endl;
    }
};

// in main.cpp, main() function

auto sinkHandle = logworker->addSink(std::make_unique<CustomSink>(),
                                 &CustomSink::ReceiveLogMessage);
struct colorcoutink{
//Linux xterm颜色
// http://stackoverflow.com/questions/2616906/how-do-i-output-coloured-text-to-a-linux-terminal
枚举FG_颜色{黄色=33,红色=31,绿色=32,白色=97};
FG_颜色GetColor(常量级别)常量
{
如果(level.value==WARNING.value){返回黄色;}
如果(level.value==DEBUG.value){返回绿色;}
如果(g3::internal::wasFatal(级别)){返回红色;}
返回白色;
}
void ReceiveLogMessage(g3::LogMessageMover logEntry)
{
自动级别=logEntry.get()。\u级别;
自动颜色=GetColor(级别);

std::cout您可以定义一个定制的sink类,其中包含一个转发 将消息剥离到控制台而不进行格式化。以下是最简单的实现形式:

class CustomSink {
public:
    void forwardLogToStdout(g3::LogMessageMover logEntry) {
        std::cout << logEntry.get().message() << std::endl;
    }
};
class自定义接收器{
公众:
void ForwardLogToStOut(g3::LogMessageMover logEntry){
std::cout addSink(std::make_unique(),&CustomSink::forwardlogtostout);