#!/usr/bin/perl # # Copyright 2001-2004 The Apache Software Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # # This script will take a combined Web server access # log file and break its contents into separate files. # It assumes that the first field of each line is the # virtual host identity (put there by "%v"), and that # the logfiles should be named that+".log" in the current # directory. # # The combined log file is read from stdin. Records read # will be appended to any existing log files. # %is_open = (); while ($log_line = ) { # # Get the first token from the log record; it's the # identity of the virtual host to which the record # applies. # ($vhost) = split (/\s/, $log_line); # # Normalize the virtual host name to all lowercase. # If it's blank, the request was handled by the default # server, so supply a default name. This shouldn't # happen, but caution rocks. # $vhost = lc ($vhost) or "access"; # # if the vhost contains a "/" or "\", it is illegal so just use # the default log to avoid any security issues due if it is interprted # as a directory separator. if ($vhost =~ m#[/\\]#) { $vhost = "access" } # # If the log file for this virtual host isn't opened # yet, do it now. # if (! $is_open{$vhost}) { open $vhost, ">>${vhost}.log" or die ("Can't open ${vhost}.log"); $is_open{$vhost} = 1; } # # Strip off the first token (which may be null in the # case of the default server), and write the edited # record to the current log file. # $log_line =~ s/^\S*\s+//; printf $vhost "%s", $log_line; } exit 0; Error: Can't open www.domain2.com.log at ./split-logfile line 54, line 37424 line 37423: www.domain1.com 24.234.98.16 - - [02/Aug/2006:18:13:52 -0700] "GET /t2/header_fruit_2bg.jpg HTTP/1.1" 304 - "www.domain1.com/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)" line 37424: www.domain2.com 72.30.135.217 - - [02/Aug/2006:18:13:52 -0700] "GET /robots.txt HTTP/1.0" 404 208 "-" "Mozilla/5.0 (compatible; Yahoo Slurp; help.yahoo.com/help/us/ysearch/slurp)"