c++ - 如何发送到 Google Logger 和 cout?

标签 c++ c++11 logging glog

我在 C++ 项目中使用谷歌记录器 (glog),其中源代码包含信息项和进度的打印输出:

std::cout << some_useful_stuff << "\n";

我可以使用 GLOG 来记录信息项:

LOG(INFO) << some_useful_stuff << "\n"; \\ gets echoed to stdout

我无法更改整个代码库中的所有 std::cout 语句(因为我正在使用来自第三方等的一些子库,并且无法将我自己的日志语句添加到它们),这阻止了我使用 if-else 结构(无论如何,这将是丑陋的,将每个输出语句包装在逻辑中)。

那么如何将 stdout 输出复制到 GLog?

std::cout << some_useful_stuff << "\n"; \\ message also goes to LOG(INFO)

可能有用:我实际上不需要同时发生这些; {CONSOLE, LOGS, BOTH} 这样的选择很有用,但我可以忍受 {CONSOLE, LOGS} 之间更简单的选择。

此外 - 经验丰富的程序员,但 C++ 新手,所以如果这非常简单;抱歉 - 提前致谢!

最佳答案

不确定 glog,但通常我们使用 dup2 系统调用将一个文件处理程序的输出重定向到另一个文件处理程序。

例如在你的情况下,让所有 std::cout 写入 glog 使用的日志文件就可以了

dup2(glog_file_handler,标准输出);

如果您能找到 glog 正在写入的日志文件的文件句柄,那么这会起作用。引用http://man7.org/linux/man-pages/man2/dup.2.html了解更多详情。

希望这对您有所帮助。

附言如果你的程序有多个线程/进程写入同一个 glog 文件并且 glog 同步写入日志文件,这将不起作用

关于c++ - 如何发送到 Google Logger 和 cout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41166257/

相关文章:

python - 在 flask 应用程序中将用户 ip 和用户 id 添加到日志文件

c++ - EnumWindowsProc() 仅在程序第一次运行时有效

c++ - 以列表作为值初始化 map

c# - 一个带有 Serilog 的记录器的多个过滤器

c++ - C++11 中由 std::tuple_size 终止的递归可变参数模板

c++ - 将 lambda 表达式或函数保存到二进制文件

.net - 使用 NLog 登录 EventLog 的正确方法

c++ - 类实例化语法

c++ - 在类中重载 + - 调试断言失败!

c++ - 为什么使用 gcc 和模板函数使用两个或更多基于 typedef 的静态断言时会出现 "conflicting declaration"错误?