竹笋

注册

 

发新话题 回复该主题

linuxgrep过滤日志延迟的问题或 [复制链接]

1#
中科治疗白癜风有疗效 https://disease.39.net/bjzkbdfyy/230703/14337705.html

问题

开发在Linux服务器上面,跑一个java的jar包程序,程序输出是标准输出,可以重定向到文件,跑了几天发现日志太大了,占用磁盘空间不说,还不好排查问题。让开发修改一下,开发说这是第三方的包,不好修改,需要时间。

只好自己想办法解决了,不需要全部的日志,那就用grep过滤一下吧!

示例

#!/bin/bash

java-jarXXX.jar

grepxxx

grep-vyyylogfile.log

这样子日志输出发现少了,好多。但是仔细查看发现不对啊,日志怎么丢失了一些,去掉重定向,观察发现是正常运行的。然后直接在终端运行:

java-jarXXX.jar

grepxxx

grep-vyyy

发现问题了,日志输出不全,感觉老是卡着,到一定量才输出,CTRL+c中断就马上打印出来了。

怀疑是管道输出的问题,然后就Google了一下,找到原因:

管道

是全缓冲的,一般来说buffer_size为,有些是。不管具体值多少,只有buffer_size满了,才会看到输出。在操作里file这个操作也是全缓冲的。

解决方法

查看了grep帮助可以看到,在输出的时候刷新,这样子就不会缓存住了,可以及时的重定向内容到文件了

--line-bufferedflushoutputoneveryline

最终版本

我的脚本的最终版本,如下:

#!/bin/bash

java-jarXXX.jar

grep--line-bufferedxxx

grep--line-buffered-vyyylogfile.log

总结

有时候觉得利索当然的事情,其实换一种场景就不一样了。

大家是否有其他方法?

分享 转发
TOP
发新话题 回复该主题