tail -f 打印有延迟,有更好实时打印 log 的工具么?

2017-12-05 15:16:43 +08:00
 lzjamao

tail -s 设置 X 秒扫描文本(单位秒),

但是,我的程序 1 秒内,有大量 IO 输出操作,另外加上 IO 延迟。有好多 LOG 输出延迟,影响看 LOG 的逻辑思路。

希望能满足后台启动程序的条件下,有更好实时显示 LOG 的方法

7091 次点击
所在节点    Linux
36 条回复
chcx
2017-12-05 18:13:09 +08:00
本地磁盘 tailf 延迟 7-8s,你确定?
文件几十 G ?不是初次 tailf ?
Tony8Finet
2017-12-05 19:41:41 +08:00
印象中有些程式会依 stdout 是否为 tty 模式,而决定是否要缓冲输出。是否是这样才会在 pipe 到 "tail -f" 时有所延迟?

最好是贴出你有问题的完整语句,或是追踪上游程式的输出行为,才好判断。
WhoMercy
2017-12-05 19:59:48 +08:00
接上面倒水比出水快的:开多个水龙头
用 grep 过滤部分 log,多个终端显示不同标识的 log。
(都是同类 log 加随机标识或 ts )
lzjamao
2017-12-05 20:19:07 +08:00
@chcx 有两段逻辑,Application::Init</br>

```
// 程序启动各种 Engine
int Application::Init()
{
// Engine,打印各种 LOG


}
```

```
// 更新各种 Engine 逻辑
Application::Loop()
{
while(true)
{
printf("loop")
Engine.Loop();
// ....
sleep(1)
}
}
```
lzjamao
2017-12-05 20:27:44 +08:00
@lzjamao 忽略此回复,看追帖
extreme
2017-12-05 21:01:48 +08:00
printf()…

个人感觉很有可能是 stdio 的 I/O buffer 导致的,可以尝试调用 output 函数后调用 fflush()。
extreme
2017-12-05 21:05:01 +08:00
最好能确认下 Engine LOG 的输出方式,用的是哪些函数。

理论上不是 tail 的问题,应该是 OUTPUT Buffer 的问题。
shiny
2017-12-05 21:05:19 +08:00
以前写 Python 的时候也遇到过这个问题,flush 刷下就好了。
bbsteel
2017-12-05 21:13:33 +08:00
lz 一目百行的能力让人叹服
phoneli
2017-12-05 21:24:23 +08:00
试试加一个 fflush
jasontse
2017-12-05 21:31:51 +08:00
用内核提供的 inotify,再延迟就是你输出的问题。
lzjamao
2017-12-05 21:32:00 +08:00
@extreme 好的我看看,感谢你的回复
lzjamao
2017-12-05 21:32:25 +08:00
@shiny 好的我看看,感谢你的回复
jy01264313
2017-12-06 01:59:07 +08:00
如果你是用 nohup 启动的命令,本身 stdout 是有缓存在的,可以试试 stdbuf -o0 nohup xxx &
lzjamao
2017-12-08 15:43:13 +08:00
@jy01264313 get it!!! :thumbsup:
lzjamao
2017-12-08 15:56:43 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/412174

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX