操作系统日志的最佳方法

操作系统日志的最佳方法

我想操作日志。到目前为止,对我来说,清除系统日志的最佳方法是:

truncate -s 0 /var/log/*log

我正在寻找最佳方法来:

1 - 定期执行上述操作。我已经尝试过了logrotate,但我无法将其设置为完全符合我的要求,即仅保留原始日志文件并定期截断它而不删除它。

- 更新:

根据北布拉德利回答这里解决方案似乎是lastaction/endscript在 logrotate 配置文件中使用选项。因此,使用以下设置可以完美运行:

/var/log/*log{
       rotate 0
       size 0 
       hourly
       nocreate
       maxage 0
       missingok
       nocompress
       ifempty
       copytruncate
       lastaction
             rm -rf /var/log/*log.1
       endscript
}

选项copytruncate将日志复制到新日志文件中,忽略rotate 0nocreate,然后截断原始日志。轮换所有日志文件后,rmlastaction/endscript删除由创建的所有新日志文件copytruncate。最后,我们只清除了原始文件。

2 - 清除最后‘n’条条目

3 - 阻止/取消阻止新条目,类似于冻结/解冻。为此,我正在考虑使用ln -s /dev/null /var/log/*log,但我不知道是否可以轻松恢复它而无需任何脚本。或者也许备份/恢复状态技术可以提供帮助。

还有其他方法可以帮助我完成上述所有操作(2 和 3)吗?

答案1

Logrotate 是专门为处理此类任务而设计的,并且它的表现相当出色。我建议你使用它。

现在,让我们看看(如果有必要 - 修复)你的 logrotate 文件,使用 Ubuntu 的好心人提供的手册页(关联)。

您的版本:

# File: /etc/logrotate.d/.test
/var/log/*log{
   size 0 
   hourly
   nocreate
   copytruncate
   rotate 0
}

我建议您使用以下内容:

# File: /etc/logrotate.d/.test
/var/log/*.log{
# the rotate option sets how many times the log files are rotated before being removed. Setting it to 0 means - delete right away (you'll only have the original)
   rotate 0
# the size option sets what size should a file reach before being rotated - I'm setting it to 10MB, but you can change it as it pleases you
   size 10M
# The size option will prevail this option. The daemon will run hourly, but won't rotate the log file until it reaches 10 MB
   hourly
# this option fits your requirement not to create new log files
   nocreate
# delete rotated log files older than 0 days
   maxage 0
# truncate the original file rather creating new one
   nocopytruncate
}

相关内容