时间旅行和日志文件

时间旅行和日志文件

当在开发系统上测试对遗留代码库的更改时,我首选的测试方法是将系统时钟设置为过去的日期,例如date -s '-7 days',然后我回放一些操作,检查输出和日志文件,并将日期提前 1 天,然后回放更多操作,检查输出和日志,提前 1 天,并且基本上根据需要重复此操作。

在最初回顾过去之后,但在回放操作之前,我运行此命令来截断未来修改日期的日志文件:

logs=$(find /var/log -type f -mtime -0); for log in $logs; do cat /dev/null > $log; done

这会清空日志文件,但是我真正想要的是一种删除文件中“未来条目”的方法,该条目位于服务器当前日期之后发生的/var/log/子目录 ( ) 下。apache/mysql/...

是否有任何实用程序/工具可以帮助删除日志条目从未来开始,而不是像我现在那样完全截断文件。

我正在使用 Debian 稳定版。

答案1

如果您的系统使用 logrorate,则可以使用 logrorate -f。这应该立即旋转(即清空)所有日志。请参阅 logrotate(8)。

编辑:事实上你的系统并不需要永久使用logrotate,你可以为这一轮循环准备好配置文件,并在将时间向后推后才运行它。 Logrorate 的另一个优点是不会丢失所有实际日志,它们仅被 gzip 压缩,并且最旧的 gzip 会被删除。

答案2

以一种或另一种方式拍摄日志目录的快照。

您的场景听起来像是需要在虚拟机中运行测试。拍摄虚拟机快照,运行测试,获得测试结果后,丢弃虚拟机状态并恢复快照。

如果您想在不创建虚拟机快照的情况下运行测试,您可以备份日志目录,并在测试后恢复备份并重新启动 syslog 守护进程。或者您可以临时挂载 tmpfs 文件系统/var/log,重新启动 syslogd,运行测试,卸载/var/log,重新启动 syslogd。

相关内容