我在 PHP 脚本中做了大约 100 万次愚蠢的事情,所以我的 Apache 错误日志现在有 12 MB!这对于调试来说可不是什么好事。
- 在什么情况下error.log会变成error.log.1和error.log.2.gz?
- 是否有一个 Linux 命令可以手动滚动日志以获取最新的 error.log
我希望有人知道一个简单的方法来实现这一点。如果没有,我会写一个 BASH 脚本。
谢谢。
答案1
- 由于日志旋转工具,您的日志正在旋转
- 如果您想轮换 apache 日志,可以使用此命令手动轮换日志。
logrotate /etc/logrotate.d/apache2 或 (file_to_be_rotated)
此工具可帮助您管理生成大量日志文件的系统。它允许自动轮换、压缩、删除和邮寄日志文件。每个日志文件可以按日、周、月或当其变得太大时进行处理。
答案2
删除文件并向写入日志文件的进程发送 HUP 信号是规范的做法。
对于 apache 来说,最好重新加载服务。
答案3
这并不能直接回答您的问题,但可能会为您提供更多选择。Apache 允许您将日志输出通过管道传输到从 stdin 读取的进程。我避免大量日志文件的首选策略是通过名为 cronolog 的实用程序传输 Apache 的日志输出,该实用程序在大多数 Linux 安装中作为可选包提供。它不会轮换到名为error_log.1
、error_log.2
等的文件,而是可以按日期和/或时间进行轮换。
例如:
ErrorLog "|/usr/bin/cronolog /path/to/httpd/logs/error_log.%Y-%m-%d"
这会将 2012 年 2 月 1 日的错误日志发送到名为 的文件中error_log.2012-02-01
,一旦时间滚动到 2012 年 2 月 2 日,它就会开始写入,error_log.2012-02-02
依此类推。
您还可以将其设置为按月、按星期几、按小时、按分钟或按秒轮换,无论您需要什么。更多信息在 cronolog.org。
如果您真的雄心勃勃,您可以编写自己的 Perl 脚本或任何脚本来从 stdin 读取并写入日志文件或使用您想要的任何规则执行操作(例如向您发送电子邮件),然后通过该脚本传输 Apache 的日志。