如何防止日志过大?

Use*_*ser 4 log logrotate

我有一个运行一些 Python 脚本的 cronjob,它们会生成大量的日志文件。我如何防止它们变得如此之大?如果文件在达到一定大小后被删除,那就太完美了。因为每隔几天,文件现在是 50MB,但会变得更大,并且在缓慢的互联网连接上下载和分析错误需要很长时间。我真的只想看到最后 1000 行,看看脚本哪里出错了。

我知道我可以编写一些代码来做到这一点,但我只是想知道 Linux 是否有一些我不知道的东西。我想大日志文件是一个常见问题。谢谢。

Liv*_*eBT 7

通常,您应该只记录您关心的活动,并且应该尽可能将程序配置得不那么冗长。

正如所建议的,使用logrotate是处理日志文件的常用方法。但是,与其向/etc/logrotate.conf您添加内容,不如将您自己的作业添加到/etc/logrotate.d/,否则您将不得不在版本升级期间查看更多配置文件的差异。

这是我为 php 脚本创建的示例:

/var/log/some-php-app/*.log {
        daily
        rotate 10
        delaycompress
        compress
        notifempty
        missingok
}
Run Code Online (Sandbox Code Playgroud)
  • /var/log/some-php-app/*.log- 是日志文件所在的路径及其名称。如您所见,您还可以使用通配符将规则应用于多个日志文件。
  • 每天-每天轮换日志文件。替代方案:每小时、每周、每月、每年、maxsize、maxage
  • 旋转 计数- 文件在被删除或邮寄到邮件指令中指定的地址之前旋转计数次。
  • delaycompress - 将上一个日志文件的压缩推迟到下一个循环周期。
  • compress - 使用 gzip 压缩旧版本的日志文件。您可以使用zless而不是less查看文件。
  • notifempty - 如果日志为空,则不轮转日志。
  • missingok - 当日志文件丢失时,继续下一个轮换作业而不发出错误消息。

查看logrotate 联机帮助页了解更多选项。


小智 2

您需要在 /etc/logrotate.conf 中设置大小

该文件默认存在并且每天运行。您唯一需要做的就是向 logrotate.conf 添加一些附加参数。

/path/to_big.log {
        size 1k
        create 700 user group
        rotate 1
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,我们指定日志的路径、要限制的大小、替换日志的权限以及要保留的副本数量。旋转 1 次将保留一份副本。