同时使用 mod_log_rotate 和 rotatelogs.exe 有什么缺点?

同时使用 mod_log_rotate 和 rotatelogs.exe 有什么缺点?

在基于 Microsoft 的平台上,使用 rotatelogs.exe 执行 ErrorLog 指令并允许 mod_log_rotate 处理 CustomLog 指令进行轮换是否存在任何缺点或隐藏陷阱?据我了解,mod_log_rotate 接管了服务器范围内的日志记录任务,那么 mod_log_rotate 和 rotatelogs.exe 如何交互?rotatelogs.exe 是否从 mod_log_rotate 传输数据?

下面是我在 httpd.conf 中的配置:

# Rotate our ErrorLogs, since mod_log_rotate doesn't seem to handle this.
ErrorLog "|bin/rotatelogs.exe -l logs/error/error.%Y-%m-%d-%H_%M_%S.log 86400"
[...]
<IfModule log_rotate_module>
#
# Produce a log file with at human readable extension in a directory called 'access'.
#
CustomLog logs/access/access_log.%Y-%m-%d-%H%M%S combined
[...]

我并不是在征求意见,尤其是那些与主题无关的意见。我想知道这是否会从技术或安全角度产生任何实际问题。

答案1

rotatelogs这是mod_log_rotate针对同一问题(无需发送信号或重新启动 Apache 即可轮换日志)的两种不同解决方案。

rotatelogs(或其他程序,如cronolog) 通过将 Apache 日志传输到处理轮换的程序来解决这个问题。这是一个好的解决方案,尽管这意味着要运行另一个进程并保持管道打开。

mod_log_rotate通过处理服务器进程中的轮换解决了这个问题。同样,这也是一个好的解决方案,但它仅有的轮换访问日志(这使得您需要对错误日志执行其他操作)。

使用这两种解决方案(一种用于处理您的访问日志,一种用于处理您的错误日志)没有什么“错误”,但为了理智和一致性,我会坚持使用一种解决方案 - 在您轮换日志时向 Apache 发出信号,或者将所有内容传输到rotatelogs


特别是在 Windows 上,我建议从外部轮换日志并向 Apache 发出信号,因为在 Windows 上传输内容可能会出现错误(据我所知,自 2006 年以来情况并没有太大改善)。

(实际上,如果我提出建议,我会推荐没有在 Windows 上运行 Apache-- Apache 设计用于在 Unix 服务器上运行,而 IIS 设计用于在 Windows 服务器上运行,尽管 Apache 人员声称“支持”Windows,但两者永远不应交叉。)

相关内容