開発サーバーで新しい仮想ホストを作成するときは常に、個別のアクセスログとエラーログを手動で指定する必要があります。
ErrorLog logs/mysite/dev1-error.log
CustomLog logs/mysite/dev1-access.log "common"
毎回ログを指定する代わりに、Apacheがログを自動的に分割するようにする方法はありますか?
Web開発者として、ローカル開発者にはおそらく200を超えるvhostがあります。個人的にはログを気にせず、すべてをメインの/ var/log/Apacheに記録します...
しかし、私がしたことは、すべてのvhostを追加/管理するシェルスクリプトを作成することでした-あなたがする必要があるのは、好きな場所にログを書き込むようにそれを微調整することです...
#!/bin/bash
ARGS=1
if [ "$1"X = "X" ];
then
echo "Must enter domain name"
exit 0
fi
if [ "$2"X = "X" ];
then
echo "Must enter domain suffix"
exit 0
fi
if [ "$3"X = "X" ];
then
echo "you must type "restart" if you want Apache restarted "no" if not!"
exit 0
fi
domain=$1.$2;
#echo $domain;
#exit 0
rm $domain.conf
echo "<VirtualHost *:80>" >> $domain.conf;
echo " ServerAdmin [email protected]" >> $domain.conf;
echo " ServerName $1.network.local" >> $domain.conf;
echo " DocumentRoot /Data/vhome/$1.$2/httpdocs" >> $domain.conf;
echo " HostnameLookups Off" >> $domain.conf;
echo " UseCanonicalName Off" >> $domain.conf;
echo " ServerSignature On" >> $domain.conf;
echo " ScriptAlias /cgi-bin/ "/Data/vhome/$1.$2/cgi-bin/"" >> $domain.conf;
echo " ErrorLog /var/log/Apache2/error_log" >> $domain.conf;
echo " CustomLog /var/log/Apache2/access_log combined" >> $domain.conf;
echo " <Directory "/Data/vhome/$1.$2/cgi-bin">" >> $domain.conf;
echo " AllowOverride All" >> $domain.conf;
echo " Options +ExecCGI -Includes" >> $domain.conf;
echo " Order allow,deny" >> $domain.conf;
echo " Allow from all" >> $domain.conf;
echo " </Directory>" >> $domain.conf;
echo " <Directory "/Data/vhome/$1.$2/httpdocs">" >> $domain.conf;
echo " Options Indexes FollowSymLinks" >> $domain.conf;
echo " AllowOverride All" >> $domain.conf;
echo " Order allow,deny" >> $domain.conf;
echo " Allow from all" >> $domain.conf;
echo " </Directory>" >> $domain.conf;
echo " # #XSS prevention" >> $domain.conf;
echo " # RewriteEngine On" >> $domain.conf;
echo " # RewriteCond %(REQUEST_METHOD) ^TRACE" >> $domain.conf;
echo " # RewriteRule .* -[F]" >> $domain.conf;
echo "</VirtualHost>" >> $domain.conf;
if [ "$3" = "restart" ];
then
rcapache2 restart;
fi
chmod 666 $domain.conf
cat $domain.conf
echo "Created!";
exit 0
それが役に立てば幸い。
-ショーン
まだApacheを使っていた頃、同僚からトリックを学びました。彼はawk
スクリプトを介してグローバルアクセスログをパイプ処理しました。 awk
スクリプトは、さまざまなログファイルの作成を処理します。
Httpd.conf内:
LogFormat "%V %p %a %l %u %t \"%r\" %s %b \"%200{Referer}i\" \"%200{User-agent}i\" \"%{cookie}n\"" awklogpipe
CustomLog "|/usr/local/bin/apacheawklogpipe" awklogpipe env=!dontlog
スクリプト/ usr/local/bin/apacheawklogpipe:
#!/bin/gawk -f
BEGIN {
months["Jan"] = "01";
months["Feb"] = "02";
months["Mar"] = "03";
months["Apr"] = "04";
months["May"] = "05";
months["Jun"] = "06";
months["Jul"] = "07";
months["Aug"] = "08";
months["Sep"] = "09";
months["Oct"] = "10";
months["Nov"] = "11";
months["Dec"] = "12";
}
{
# HEADS UP: SET THIS!!!!
LOGBASE="/var/log/httpd/access"
SSL=""
# Automagicly set first
SITE=tolower($1);
PORT=$2
if ($2 == 443)
{
SSL="-ssl"
}
# Extract all but first two fields (vhostname vhostport to be exactly) into LINE
LINE=substr($0,index($0,$3));
# No matter where it is, we will find an Apache datestamp.
match(LINE,/\[[0-9]+\/[A-Z][a-z]+\/[0-9]+:[0-9]+:[0-9]+:[0-9]+[\t ]+[+-][0-9]+\]/);
split(substr(LINE,RSTART + 1,RLENGTH - 2), ap_log_time, /[\/: ]/);
#ap_rotatelog= LOGBASE "/" SITE ":" PORT "/access-log" SSL "-" ap_log_time[3] "-" months[ap_log_time[2]] ap_log_time[1];
ap_rotatelog= LOGBASE "/" SITE "/access_log" SSL;
if (system("test -d " LOGBASE "/" SITE ) == 0)
{
print LINE >> ap_rotatelog;
close(ap_rotatelog);
}
else
{
print SITE "\t" SSL "\t" LINE >> LOGBASE "/w3logrotate-error.log";
close(LOGBASE "/w3logrotate-error.log");
}
}
/ usr/local/bin/apacheawklogpipeが実行可能であることを確認してください。このスクリプトで処理する必要があるのは、virtualhostnameに対応するディレクトリを/var/log/httpd/access
に作成することだけです。仮想ホスト構成を作成し、ログディレクトリを作成するスクリプトがありました。
別のオプション。 httpd.confでそれらを分割しないでください。代わりに、すべてをメインのアクセスログに記録し、後で split-logfile のようなプログラムで分割します。これは、ログ構成を簡素化するのに役立ちます。
これは http://httpd.Apache.org/docs/2.2/logs.html#virtualhost で説明されています
仮想ホストに関する情報をログ形式の文字列に追加することで、すべてのホストを同じログに記録し、後でログを個々のファイルに分割することができます。たとえば、次のディレクティブについて考えてみます。
LogFormat "%v %l %u %t \"%r\" %>s %b" comonvhost CustomLog logs/access_log comonvhost
%vは、リクエストを処理している仮想ホストの名前をログに記録するために使用されます。次に、 split-logfile のようなプログラムを使用して、アクセスログを後処理し、仮想ホストごとに1つのファイルに分割できます。
たぶん mod_macro を見てください。これにはより一般的なアプローチがありますが、それ以外の場合にも役立つと思います。