中科治疗白癜风有疗效 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
总结
有时候觉得利索当然的事情,其实换一种场景就不一样了。
大家是否有其他方法?