Apache で仮想ホストごとに 2 つのエラー ログを持つことは可能ですか?

Apache で仮想ホストごとに 2 つのエラー ログを持つことは可能ですか?

私は約 10 個の VirtualHost を持っており、error_logs を分離しておくことを好みます。最近、mod_security スキャンのために error_logs をすべて結合する必要もあります。

テスト VirtualDomain に 2 つの ErrorLog を定義すると、エラーがログに記録されないことに気付きました。かなり奇妙です。

CustomLog に ErrorLog の役割を果たすことは可能ですか?

それとも、2 つの ErrorLog を間違って定義しているのでしょうか?

<VirtualHost 1.2.3.4:80>
    ServerName mydomain.net
    ServerAlias www.mydomain.net mydomain.net
    DocumentRoot /var/www/html/mydomain
    ServerAdmin [email protected]
    UseCanonicalName Off

    ErrorLog logs/mydomain.net-error_log
    ErrorLog logs/unified_modsecurity-error_log

    CustomLog logs/mydomain.net-access_log combined
    UserDir disabled
    UserDir enabled mydomainuser
</VirtualHost>

答え1

いいえ、VirtualHost ごとに 2 つの ErrorLog ディレクティブを設定することはできません。ただし、UNIX の 'tee' コマンドを使用して 2 つ (またはそれ以上) のファイルにログを記録するために、Apache のコマンドへのパイプ機能を使用することはできます。

エラーログ "|/usr/bin/tee -a /var/log/apache/error-1.log /var/log/apache/error-2.log"

答え2

によるApache 2.4 ログドキュメント:

デフォルトでは、パイプ ログ プロセスはシェルを呼び出さずに生成されます。シェルを使用して生成するには、"|" の代わりに "|$" を使用します (通常は /bin/sh -c を使用)。

これは Apache 2.2 のデフォルトの動作でした。

例:

# Write to files error-1.log and error-2.log, and echo to stdout
CustomLog "|$/usr/bin/tee -a /var/log/apache/error-1.log /var/log/apache/error-2.log"

私が遭遇したもう一つの問題:

  • 二重引用符とバーの間にスペースを入れないでください。
    • "|$ ...有効です。
    • " |$ ...ではありません。

関連情報