我是g3log的新手。我编译并运行了我在repo中找到的一个示例,但无法修改它以将日志消息打印到控制台而不是文件。 示例中的以下行设置了记录器:
auto worker = g3::LogWorker::createLogWorker();
auto handle= worker->addDefaultLogger(argv[0], path_to_log_file);
g3::initializeLogging(worker.get());
中间的行设置日志的前缀,并给出应创建日志文件的路径。 如何修改此代码以打印到控制台\控制台和文件?
谢谢,
奥马尔。
答案 0 :(得分:1)
您可以使用消息接收器函数定义自定义接收器类,该消息接收器函数可以转发 剥离消息到控制台而不格式化。下面是实现的最简单形式:
class CustomSink {
public:
void forwardLogToStdout(g3::LogMessageMover logEntry) {
std::cout << logEntry.get().message() << std::endl;
}
};
因此,在您的代码中,您只需用以下代码片段替换worker-> addDefaultLogger(...):
auto handle = worker->addSink(std::make_unique<CustomSink>(), &CustomSink::forwardLogToStdout);
答案 1 :(得分:0)
从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);
因此,如果删除颜色“东西”,记录器将输出到控制台