apacheのerror_logで日本語が化けるのに困ってるなら
subversionをWebDAV経由で利用すると何かエラーが発生した場合apacheのエラーログに記録されますが、subversionのエラーメッセージはUTF-8なので、apacheのエラーログに記録される段階で普通、日本語部分が文字化けします。
つい今しがた、ちょうどsubversionでの処理がトラぶって結構困ってたのでapacheのエラーログの文字化け部分を日本語に復元するPerlスクリプトを作ってみました。
use strict; use warnings; use File::Spec; my $logfile = shift @ARGV or die "Please appoint a log-file."; die "Cannot find logfile, $logfile" if !-f $logfile; my($vol, $dir, $file) = File::Spec->splitpath($logfile); my $outfile = './'. $file .'-jp.txt'; open my $in, "<", $logfile or die "File open error, $logfile"; open my $out, ">", $outfile or die "File open error, $outfile"; while (<$in>) { s{\?\\([a-f\d]{3})}{chr($1)}ieg; s{\\x([a-f\d]{2})}{pack("C", hex($1))}ieg; print {$out} $_; } close $in; close $out; print 'Finished. ' .localtime() ."\n"; 1;
このスクリプトを適当な場所に置いて(便宜上、jp_log.plと名付けておきます)、
perl jp_log.pl /usr/local/apache2/logs/error_log
を実行すると(引数で指定したエラーログが存在する and jp_log.pl実行者がエラーログの読込み権限を持ってるなら)、 jp_log.plと同じ場所に「”エラーログ名” .”-jp.txt”」という命名ルールで復元処理後のエラーログを作ってくれます。多分。
手元で実際に困って作ったスクリプトなので、その手元の環境(MacOS X 10.4)で動くことが前提・UTF-8限定で、Windowsサーバとかは全然想定してませんが、お役に立つようでしたら、どうぞ。