Skip to content

Commit bb403d0

Browse files
authored
Merge pull request #33 from fluent/fix/mp-utf8
set Data::MessagePack->utf8(1) by default.
2 parents 9da1f0d + bc68419 commit bb403d0

File tree

4 files changed

+48
-1
lines changed

4 files changed

+48
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ Fluent::Logger is a structured event logger for Fluentd.
4040
timeout => 'Num': default is 3.0
4141
socket => 'Str': default undef (e.g. "/var/run/fluent/fluent.sock")
4242
prefer_integer => 'Bool': default 1 (set to Data::MessagePack->prefer_integer)
43+
utf8 => 'Bool': default 1 (set to Data::MessagePack->utf8)
4344
event_time => 'Bool': default 0 (timestamp includes nanoseconds, supported by fluentd >= 0.14.0)
4445
buffer_limit => 'Int': defualt 8388608 (8MB)
4546
buffer_overflow_handler => 'Code': optional

lib/Fluent/Logger.pm

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,11 @@ use Class::Tiny +{
4242
socket_io => sub {},
4343
errors => sub { [] },
4444
prefer_integer => sub { 1 },
45+
utf8 => sub { 1 },
4546
packer => sub {
4647
my $self = shift;
4748
my $mp = Data::MessagePack->new;
49+
$mp->utf8( $self->utf8 );
4850
$mp->prefer_integer( $self->prefer_integer );
4951
$mp;
5052
},
@@ -402,6 +404,7 @@ create new logger instance.
402404
timeout => 'Num': default is 3.0
403405
socket => 'Str': default undef (e.g. "/var/run/fluent/fluent.sock")
404406
prefer_integer => 'Bool': default 1 (set to Data::MessagePack->prefer_integer)
407+
utf8 => 'Bool': default 1 (set to Data::MessagePack->utf8)
405408
event_time => 'Bool': default 0 (timestamp includes nanoseconds, supported by fluentd >= 0.14.0)
406409
buffer_limit => 'Int': defualt 8388608 (8MB)
407410
buffer_overflow_handler => 'Code': optional

t/07_str_bin.t

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,20 @@ my $port = $server->port;
2121
use_ok "Fluent::Logger";
2222

2323
subtest str_bin => sub {
24-
my $logger = Fluent::Logger->new( port => $port );
24+
my $logger = Fluent::Logger->new( port => $port, utf8 => 0 );
2525

2626
isa_ok $logger, "Fluent::Logger";
27+
is $logger->packer->get_utf8, 0, "packer utf8 is off";
2728
my $tag = "test.tcp";
2829
ok $logger->post( $tag, { "foo" => decode_utf8("内部文字列") }), "post str ok";
2930
ok $logger->post( $tag, { "bar" => "バイナリ列" }), "post bin ok";
31+
ok $logger->post( $tag, { "broken" => "\xE0\x80\xAF" }), "post broken utf8 ok";
3032
sleep 1;
3133
my $log = slurp_log $dir;
3234
note $log;
3335
like $log => qr/"foo":"内部文字列","tag":"$tag"/, "match post str log";
3436
like $log => qr/"bar":"バイナリ列","tag":"$tag"/, "match post bin log";
37+
like $log => qr/"broken":"\xE0\x80\xAF","tag":"$tag"/, "match post broken utf8 log";
3538
};
3639

3740
done_testing;

t/07_str_utf8.t

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
use strict;
2+
use warnings;
3+
use FindBin;
4+
use lib "$FindBin::Bin/../";
5+
use Test::More;
6+
use Test::TCP;
7+
use Time::Piece;
8+
use Encode;
9+
use t::Util qw/ run_fluentd slurp_log /;
10+
use POSIX qw/ setlocale LC_ALL /;
11+
use Capture::Tiny qw/ capture /;
12+
13+
use Config;
14+
if ( $Config{d_setlocale} ) {
15+
setlocale(LC_ALL, "C");
16+
}
17+
18+
my ($server, $dir) = run_fluentd();
19+
my $port = $server->port;
20+
21+
use_ok "Fluent::Logger";
22+
23+
subtest str_bin => sub {
24+
my $logger = Fluent::Logger->new( port => $port, utf8 => 1 );
25+
26+
isa_ok $logger, "Fluent::Logger";
27+
is $logger->packer->get_utf8, 1, "packer utf8 is on";
28+
my $tag = "test.tcp";
29+
ok $logger->post( $tag, { "foo" => decode_utf8("内部文字列") }), "post str ok";
30+
ok $logger->post( $tag, { "bar" => "バイナリ列" }), "post bin ok";
31+
ok $logger->post( $tag, { "broken" => "\xE0\x80\xAF" }), "post broken utf8 ok";
32+
sleep 1;
33+
my $log = slurp_log $dir;
34+
note $log;
35+
like $log => qr/"foo":"内部文字列","tag":"$tag"/, "match post str log";
36+
like $log => qr/"bar":"バイナリ列","tag":"$tag"/, "match post bin log";
37+
like $log => qr/"broken":"\xE0\x80\xAF","tag":"$tag"/, "match post broken utf8 log";
38+
};
39+
40+
done_testing;

0 commit comments

Comments
 (0)