在基于Microsoft的平台上,使用rotatelogs.exe for ErrorLog指令并允许mod_log_rotate处理CustomLog指令进行轮换有任何缺点或隐藏的缺陷吗?据我了解,mod_log_rotate接管服务器范围内的日志记录职责,那么mod_log_rotate和rotatelogs.exe如何交互?来自mod_log_rotate的rotatelogs.exe管道数据是什么?
以下是我在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 [...]
我不是在征求意见,特别是如果它们是偏离主题的话.我想知道这是否会从技术或安全角度产生任何实际问题.
rotatelogs和mod_log_rotate是针对同一问题的两种不同解决方案(无需发信号或重启Apache即可旋转日志).
rotatelogs(或其他程序,如cronolog
)通过将Apache日志传递给处理旋转的程序来解决问题.这是一个很好的解决方案,但它意味着运行另一个进程并保持管道打开.
mod_log_rotate通过处理服务器进程中的旋转来解决问题.同样,这也是一个很好的解决方案,但它只会旋转访问日志(这使得您需要为错误日志执行其他操作).
使用这两种解决方案没有“错误”(一个用于处理访问日志,一个用于处理错误日志),但为了理智和一致性,我会坚持一个解决方案 – 在旋转日志时发出Apache信号,或者管道旋转日志的一切.
特别是在Windows上,我建议在外部轮换您的日志并发信号通知Apache,因为piping stuff around on Windows can be buggy(据我所知,自2006年以来情况没有太大改善).
(实际上,我建议我不建议在Windows上运行Apache – Apache设计为在Unix服务器上运行,IIS设计为在Windows服务器上运行,尽管Apache人员可能会声称,但两者之间永远不应该交叉支持“Windows.”