update.mod_vhost_aliasApacheのmod_vhost_aliasのVirtualDocumentRootは非常に便利で一つの設定でapacheの再起動なしに複数のVirtualHostを運用する事ができます。mod_vhost_aliasにはその特性上からかいくつか欠点があり、そのうちの一つとして「アクセスログ、エラーログがVirtualHost単位で分割できない」という問題があります。最悪アクセスログに関してはLogFormatにて%vを指定する事でVirtualHostのServerNameをログに出力させる事ができるので、フィルターなりを行うとなんとか取得可能なのですが、エラーログについてはApacheの仕様でLogFormatを変更できないという事がありどうしようもない状態でした。今回はmod_mrubyを使用してmod_vhost_aliasのどうしようもないエラーログをVirtualHost単位に出力させる方法を検証しました。mod_mrubymod_mrubyは@matsumotory氏が開発を始めたApacheの拡張モジュールです。mrubyでApacheのモジュールが書けちゃいます。modules/mod_mruby.soの行が追加されます。/path/to/vhost-log.rb</VirtualHost>mod_vhost_aliasは、上記のような設定です。ディレクティブを設定しちゃうと、mrubyでの別ファイルへのerror_log出力は動かなくなったので記述はしないようにしています。mrubyInsertFilterMiddleという部分はフックするタイミングで、続いて、実行するmrubyスクリプトのパスを記述します。今回のエラーログ分割では、ここでmrubyInsertFilterMiddleとしなければうまく動きませんでした。具体的にはmrubyLogTransactionMiddleですと、うまくふりわけきれないような挙動となりました。いうメソッドにてApacheのエラーログを任意のファイルに書き出す事ができます。メソッドにて接続中のServerNameを取得し、その値に応じてディレクトリを作成しログの出力先を変更しています。テストここでApacheを再起動。test.cgiばっちり!おわりにまだ検証不足ではありますが、mod_vhost_aliasの問題を一つ解決できました。僕はC言語はまったくできないですし、rubyもペーペーですがそれでも簡単に実装でき驚いています。今回はエラーログの振り分けがなんとかならないか調べていてmod_mrubyにたどり着きましたが、mod_mrubyのドキュメントを読めば読むほどその可能性にわくわくしてきました。これからいろんなところで使ってみたいと思います。upLoginユーザーは見つかりませんでした。