如何防止日志变得太大?

如何防止日志变得太大?

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

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

答案1

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

根据建议,使用日志旋转是处理日志文件的常用方法。但/etc/logrotate.conf您不应该向 中添加内容,而应该向 中添加自己的作业/etc/logrotate.d/,否则在发布升级期间,您将不得不查看配置文件的更多差异。

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

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

看看logrotate 手册页以获得更多选项。

答案2

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

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

/path/to_big.log {
        size 1k
        create 700 user group
        rotate 1
}

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

答案3

如果您的日志增长非常快,您不能等待 cron 每天运行一次 logrotate,因为这是设置前面答案中提到的大小限制后的默认设置,您可以在 /etc/cron.hourly 中创建一个符号链接到 /etc/cron.daily 中的 logrotate cron 作业,使用以下命令:

sudo ln -s /etc/cron.daily/logrotate /etc/cron.hourly/

您唯一需要记住的是,一旦解决导致产生过多日志的问题,请务必删除该链接。也就是说,如果您无法控制某些因素导致产生过多日志,则需要报告有关该问题的错误,因为它可能会在不知不觉中影响其他人。这种错误可能会导致根卷空间不足,然后人们会看到各种问题,却永远不会意识到这是因为他们的根卷空间不足。

相关内容