为什么简单的解决方案是“在日志文件名中添加日期时间后缀,例如 access.log.20210909.gz”不是 logrotate
的默认行为?而不是重命名所有日志文件的文件名每次我们旋转(这显然更复杂)?
换句话说,为什么logrotate
使用暗示重命名的解决方案每个文件在每个时期,当有一个只需要重命名给定文件的解决方案时只有一次在它的生命中?
这背后肯定有一个原因,但我目前还没有看到。
示例:让我们采用logrotate
Apache 的标准规则:
/var/log/apache2/access.log
/var/log/apache2/access.log.1
/var/log/apache2/access.log.2.gz
/var/log/apache2/access.log.3.gz
...
/var/log/apache2/access.log.100.gz
当我们想要将日志备份到远程计算机时,那么因为每次旋转时文件名都会改变,文件有被一次又一次重新传输的风险(取决于备份软件)。
此外,这些(不断变化的)文件名对于人类来说不太方便查看,因为它们没有告诉任何有关日期的信息。
logorate
要求使用此方案是否有任何缺点(我还没有看到) :
/var/log/apache2/access.log
/var/log/apache2/access.log.20210908_0100.gz
/var/log/apache2/access.log.20210907_0100.gz
/var/log/apache2/access.log.20210906_0100.gz
...
?
答案1
这样做没有缺点,除非您想在一天内进行多次日志轮转,否则您应该将时间添加到模式中。
还想象一下您每天都会轮换,但如果文件太大的话。您将在这些旋转中收到错误。
答案2
您需要以一致的方式定义应使用的日期。并非每个日期都适合所有情况。以下是一些可以开始的:
- 创建日期
- 首次写入日期
- 循环日期
- 上次日志条目的日期(即上次修改)
这些日期中的任何一个都假定每天最多有一个日志文件。如果这是可以接受的,那么就没有什么特殊原因不应该在日志文件中使用日期后缀。