我有一个将日志生成到文件的应用程序,但它不提供任何日志轮换策略,并且很快就填满了磁盘。(为什么会这样?我还在弄清楚)
为了缓解这种情况,我有3个选择:
1.添加对日志轮转的支持- * 由于某些原因,这将花费大量时间,现在不希望这样做 *
1.使用Linux logrotate -我可以使用它,它将轮转和清除日志文件
1.只需将日志发布到/dev/stdout而不是文件- * 在我的假设中,这不会占用任何磁盘空间,并且可以完成我的工作 *
如果我们暂时跳过第2点,我将尝试了解将日志写入stdout而不是文件的缺点。
更多信息:
- 每秒发布的日志数为几千个
- 发布到file或stdout的日志将通过单独的进程发送到ELK/logstash
我知道最好和最简单的方法是在应用程序中支持日志旋转/清除,但是,有人能帮助我了解使用stdout与文件进行日志记录的利弊吗?
我对这个概念相对较新,任何帮助或指向正确文档的指针都会非常有帮助。
1条答案
按热度按时间1dkrff031#
如果您已经通过ELK/logstash使用了集中式日志记录,并且日志服务器的磁盘空间没有问题,那么就没有理由将其保存到本地磁盘。因此,我认为将其打印到stdout(通过控制台附加器,而不是直接打印到System.out)没有问题,因为如果将其发布到ELK,您不会丢失日志。
此外,如果您在docker/container中运行应用程序,那么docker会保存最后X行的副本,并使用自己的机制来避免填满磁盘
是否有更多限制/条件要求您保留日志的本地副本?
如果否=〉则打印到标准输出
如果是=〉一般不负责
单独的进程是否每隔X分钟/秒运行一次,并且您不能错过日志的任何一行?
=〉然后保存一个本地副本并保持较小的同步比率,并尝试根据比率拆分日志文件,以便轻松删除已同步的旧日志文件(如果日志旋转等机制尚未在日志框架中实现,但“sperate process”听起来像是日志收集和发布的“自制”过程)
还是通过“日志附加器”立即发布到ELK?
=〉只需将其打印到stdout(通过控制台附加器)