【发布时间】:2015-03-12 20:41:32
【问题描述】:
我的程序中有一个 std::stringstream,它会定期(使用计时器)刷新到日志文件中。刷新和计时器在默认的运行循环中。
应用程序的其他部分只是附加到该 std::stringstream 并且计时器负责其余部分。我确实限制了字符串流的大小(到 1mb),所以如果流是“满的”,我会丢弃消息。
我只是想知道,这是最佳实践吗;
- 性能?在主线程上可以处理这个 IO 吗?我可以做得更好吗?
- 严重错误?问题可能出在我对 libuv 的使用中,这可能意味着基于 libuv 的日志记录会被破坏?
node.js 如何处理日志记录?
【问题讨论】:
-
我在这里看到的唯一问题是,如果您将日志重定向到文件中,它将被阻塞。所以,我要说的是,既然你已经使用 libuv 来刷新你的流,那么为什么不通过
uv_fs_*+ 重定向接口实现一个完全非阻塞的日志记录方法呢?在我的实践中,我发现阻塞日志文件对于增加额外延迟非常重要,尤其是在 libuv 的情况下,所有工作都在单个线程中完成,无论其他一切是否都是非阻塞的。 -
我正在使用 uv_fs_* 以非阻塞方式写入文件。
标签: libuv