Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Is it possible to configure Apache to use a different log file for each subdomain, even if all of the subdomains are within the same VirtualHost container?

So, I have only one VirtualHost:

<VirtualHost *:80>

And I want to end up with the following log files:


I know I can probably do this with a custom log format and split-logs, but I was wondering if there's a way to just have Apache do it for me.

share|improve this question

You just specify ErrorLog and CustomLog within each VirtualHost directive. With that in mind, you would not be able to use ServerAlias and have separate log files for each host via normal performance without specifying separate VirtualHost.

However, you could pipe the log through a script, and have the script make the separate files. Look at the piped logging documentation.

You could also use a post processing script, such as utilizing grep to parse out the logs. A post processing script could be specified in the nightly logrotate under the postrotate or preprotate sections.

Apache 2.2 Piped Logging

share|improve this answer
Having a different server log for each VirtualHost doesn't help me. I have only one VirtualHost. Within that single VirtualHost there are multiple subdomains. I need separate logs for each subdomain within the single VirtualHost. – Keith Palmer Jr. Mar 24 '10 at 15:53
Separate your ServerAlias subdomains into VirtualHost s with identical configurations (See the Apache documentation Re: NameVirtualHost), or proceed using piped logging & a custom processing script as Warner describes above. – voretaq7 Mar 24 '10 at 17:59
I'd really rather not do that, the VirtualHost has a lot of configuration with it, and it would be a lot of copy/paste configuration stuff. Maybe there's a way I can do an Include with the generic stuff... – Keith Palmer Jr. Mar 24 '10 at 18:11
piped logging as Warner describe will probably be a good bed for you. – corprew Mar 24 '10 at 21:54

You should be able to use apache environment variables to get this working:

LogFormat "%h \"%r\" %>s \"%{Referer}i\" \"%{User-Agent}i\"" vhostformat

SetEnvIfNoCase Host example\.com mainlog
CustomLog /var/log/httpd-example.log vhostformat env=mainlog

SetEnvIfNoCase Host test1\.example\.com vhost1log
CustomLog /var/log/httpd-access_test1.log vhostformat env=vhost1log

SetEnvIfNoCase Host test2\.example\.com vhost2log
CustomLog /var/log/httpd-access_test2.log vhostformat env=vhost2log

SetEnvIfNoCase Host test3\.example\.com vhost3log
CustomLog /var/log/httpd-access_test3.log vhostformat env=vhost3log
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.