apacheのerror_logで日本語が化けるのに困ってるなら
subversionをWebDAV経由で利用すると何かエラーが発生した場合apacheのエラーログに記録されますが、subversionのエラーメッセージはUTF-8なので、apacheのエラーログに記録される段階で普通、日本語部分が文字化けします。
つい今しがた、ちょうどsubversionでの処理がトラぶって結構困ってたのでapacheのエラーログの文字化け部分を日本語に復元するPerlスクリプトを作ってみました。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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と名付けておきます)、
1 | 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サーバとかは全然想定してませんが、お役に立つようでしたら、どうぞ。