Plackup访问日志区域设置和打开编译编码问题



我的区域设置是utf8,因此,当开始打包时,日期字符串也本地化了。因此,我得到如下的控制台访问日志:

$ 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

my partial 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打开pragma)。没有它,访问日志正确打印Júl,有了它,访问日志得到垃圾。

那么,如何修复我的访问日志?

  • 用于本地化日期字符串的无垃圾打印输出,或
  • 将访问日志消息转换为C-locale

任何想法?

Ps:我知道,比PSGI是面向字节的规范(和MyApp正确处理它),但这个问题是在MyApp。

我觉得你的open pragma太宽泛了。你说你需要它,但没有说细节。您应该能够将其限制为仅显式使用的流。

如果这太难弄清楚,只需为日志消息所在的STDERR流整理IO层:

binmode STDERR, ':bytes';

相关内容

  • 没有找到相关文章

最新更新