Apache Guide: Logging, Part 5: Advanced Logging Techniques and Tips Page 2
If you want to log to a process of some kind, you might be better advised to look for a module that already implements the functionality that you are looking for. Check out http://modules.apache.org/ for a list of some of the modules available to do all sorts of cool things with Apache.
Rotating Your Log Files
Log files get big. If you're not careful, and if you're logging to
somewhere like /var, you can actually fill up the partition and
bring your server to a grinding halt. Yes, I've done this.
The way around this is to move your log files to some other place
before they get too big. This can be accomplished a number of different
ways. Some Unix variants come with a logrotate script that handles
this for you. RedHat, for example, comes preconfigured to rotate your
logs for you every few days, based on either their size or their
age.
If you want to do this yourself, you can use a Perl module (freely
available from CPAN) called Logfile::Rotate. The following code, run
periodically (perhaps once a week?) by cron, will rotate out your logfile,
keeping five previous log files at any given time. Each backup log file
will be gzipped to conserve space.
use Logfile::Rotate; = new Logfile::Rotate( File => '/usr/local/apache/logs/access_log', Count => 5, Gzip => '/bin/gzip', Signal => sub { '/usr/local/apache/bin/apachectl restart'; } );This does not seem like much. The Perl module takes care of all the details. You'll end up with files called things like
access_log.1.gz,access_log.2.gz, and so on. Each file will get bumped up one number each time, and the file that used to beaccess_log.5.gzwill be deleted each time.This keeps you from running out of space on your log drive, and keeps as much of an archive as you like.
Logging for Multiple Virtual Hosts
I had several people write to me asking about how to handle logging when you have more than one virtual host on the same machine. I assume that they are running all of their logs into one log file, and are then attempting to split that log file back out into its component parts in order to get meaningful reports per host.
The solution to this problem is not to log to one log file in the first place. I know that there are utilities out there that will take a mixed log file, and, based on your virtual host configurations, figure out what requests were for which virtual host, and generate reports appropriately. This all seems to be too much work, as far as I can tell.
In each of your
VirtualHostsections, simply specify a log file for that host. You can then handle each log file separately when it comes time to run reports.There are some concerns with available file handles. That is, if you are running hundreds of virtual hosts, and have a log file per host, you may encounter a situation where you run out of available file handles. This can cause system instability and can even cause your system to halt. However, this is primarily a concern on servers that are hosting a very large number of virtual hosts.
For those that asked this question, please let me know if I'm completely missing the point of your question.
Summary
In the last several weeks, we've talked about various aspects of logging with Apache. You should now be equipped to log whatever information that you're interested in, and get all sorts of useful statistics out of those log files.
