私のロケール設定は utf8 なので、plackup を開始すると、日付文字列もローカライズされます。したがって、次のようなコンソール アクセス ログを取得します。
$ plackup a.psgi
HTTP::Server::PSGI: Accepting connections at http://0:5000/
127.0.0.1 - - [24/júl/2011:12:15:44 +0200] "GET / HTTP/1.1" 200 11 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7) AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 Safari/534.48.3"
^- garbage
私の部分的な a.psgi:
use 5.014;
use warnings;
use utf8;
use open qw(:std :utf8); #the problem....
use Encode;
use Plack::Builder;
use MyApp;
my $runner = MyApp->new(...);
my $app = sub {
$runner->run(shift);
};
builder {$app;};
問題のある行はopen pragma
. (MyApp に open プラグマが必要です)。それがないと、アクセスログは正しく出力されますJúl
が、アクセスログはゴミになりました。
では、アクセスログを修正するにはどうすればよいですか?
- ローカライズされた日付文字列のゴミのない印刷、または
- アクセス ログ メッセージを C ロケールに変換する
何か案が?
Ps: PSGI はバイト指向の仕様 (および MyApp が正しく処理している) であることはわかっていますが、この問題は MyApp の外部にあります。