Windows

一起使用 mod_log_rotate 和 rotatelogs.exe 有什麼缺點?

  • February 24, 2014

在基於 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
[...]

我不是在徵求意見,特別是如果他們離題的話。我想知道這是否會從技術或安全形度產生任何實際問題。

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。)

引用自:https://serverfault.com/questions/577908