Apacheで特定の条件にSetEnvIfで複数の環境変数を設定する

Apacheのaccess_logで、ELBからのヘルスチェックや、画像やCSSへのアクセスなどをログに残したくない場合があります。この時、httpd.confで

SetEnvIf User-Agent "ELB-HealthChecker.*" nolog
SetEnvIf Request_URI "\.(jpg|png|gif|css|js)$" nolog

CustomLog logs/access_log combined env=!nolog

のようにして、nologがセットされていないアクセス時のみaccess_logへ記録するようにして、無駄なログが残るのを防いだりすることがあります。

 

しかし先日、障害の調査で一時的にELBからのアクセスのみをaccess_logではなくて別のログファイルに出力する必要が出てきました。

そこで、

SetEnvIf User-Agent "ELB-HealthChecker.*" fromelb
SetEnvIf Request_URI "\.(jpg|png|gif|css|js)$" nolog 

CustomLog logs/access_log combined env=!nolog env=!fromelb
CustomLog logs/healthcheck_log combined env=fromelb

などとやってみたのですが、CustomLog側ではenv=を複数書くことはできないので動かず、ちょっとはまってしまったのですが、実はSetEnvIfは特定の条件に対して複数の環境変数を設定することが可能なので、

SetEnvIf User-Agent "ELB-HealthChecker.*" nolog
SetEnvIf User-Agent "ELB-HealthChecker.*" fromelb
SetEnvIf Request_URI "\.(jpg|png|gif|css|js)$" nolog 

CustomLog logs/access_log combined env=!nolog
CustomLog logs/healthcheck_log combined env=fromelb

のように書けば簡単に対処出来ました。