Hello,
I'm not so good at English, sorry.
While I was rebooting my database server, my Mojolicious server tried to
connect it and failed. This is the output via STDERR:
---
$ cat log/app_err.log
DBIx::Class::Storage::DBI::catch {...} ():
DBI Connection failed: DBI
connect('dbname=webstore2;host=192.168.0.170','webstore',...) failed:
could not connect to server: 호스트로 갈 루트가 없음
---
The last line contains a message in Korean ("No route to host" in English).
At the same time, the logger output the same message but Korean characters
incorrectly.
---
$ cat log/production.log
[Fri Jan 19 07:41:29 2018] [error] DBIx::Class::Storage::DBI::catch {...}
():
DBI Connection failed: DBI
connect('dbname=webstore2;host=192.168.0.170','webstore',...) failed:
could not connect to server: 호스트로 ê°ˆ 루트가 ì—†ì
---
I copied production.log and found that this is because a message which had
been encoded using UTF-8 was encoded again:
---
$ cat test.pl
open my $fh, '<', 't.log';
my $line = <$fh>;
say $line; # broken characters
my $once = decode('UTF-8', $line);
say $once; # encoded byte stream
my $again = decode('UTF-8', $once); # decode decoded string again
say $again; # now I get original Unicode string. (Wide character warning)
$ perl test.pl
[Fri Jan 19 07:41:29 2018] [error] DBIx::Class::Storage::DBI::catch {...}
(): DBI Connection failed: DBI
connect('dbname=webstore2;host=192.168.0.170','webstore',...) failed: could
not connect to server: 호스트로 ê°ˆ 루트가 ì—†ì Œ
[Fri Jan 19 07:41:29 2018] [error] DBIx::Class::Storage::DBI::catch {...}
(): DBI Connection failed: DBI
connect('dbname=webstore2;host=192.168.0.170','webstore',...) failed: could
not connect to server: 호스트로 갈 루트가 없음
Wide character in say at decode.pl line 14, <$fh> line 1.
[Fri Jan 19 07:41:29 2018] [error] DBIx::Class::Storage::DBI::catch {...}
(): DBI Connection failed: DBI
connect('dbname=webstore2;host=192.168.0.170','webstore',...) failed: could
not connect to server: 호스트로 갈 루트가 없음
---
In my opinion, an original message from an external module(DBIx::Class in
this case) may be a Unicode string or an encoded bytestream, depending on
what the author of the module chose. So Mojo logger have to check whether
the message is Unicode or not using a method like Encode::is_utf8.
Of course it may be that I'm wrong and misunderstand the problem.
Thanks.
--
You received this message because you are subscribed to the Google Groups
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.