|
From: Mike S. <m...@pe...> - 2010-04-21 07:07:13
|
On Tue, 20 Apr 2010, pa...@ae... wrote:
> Everything works, because the utf8 flag is set everything is fine.
> However, as soon as we start spawning threads...
Works for me also, only thing I changed was to add
use utf8;
at the beginning as you're writing code in UTF8. Without it, I end up
with doubly-encoded characters in the log file (no warning, though).
Tested with perl-5.10.0 and perl-5.10.1.
-- Mike
Mike Schilli
m...@pe...
>
>
>
> use threads;
>
> use threads::shared;
>
> use Log::Log4perl qw(get_logger);
>
> Log::Log4perl->init_and_watch("log.conf", 60);
>
>
>
> my $char = "\x{30DE}\x{30A4}\x{30AF}";
>
>
>
> #my $a = threads->create(\&foo, 'Somecategory');
>
> #$a->join();
>
>
>
> foo('Somecategory');
>
>
>
> sub foo {
>
> my $cat = shift;
>
> my $log = get_logger($cat);
>
>
>
> $log->info("character [$char]");
>
> }
>
>
>
> I get "Thread 1 terminated abnormally: Wide character in syswrite at
> /usr/lib/perl5/site_perl/5.8.8/Log/Log4perl/Appender/File.pm line 242."
>
>
>
> This seems to be a case where the file handle is losing the utf8
> property, and so it must be set again on the handle. I'm not sure why
> exactly that happens and am still investigating but this seems to fix
> it:
>
>
>
> Adding to Log4perl/Appender/File.pm on line 242 above the syswrite:
>
>
>
> If (defined $self->{utf8}) {
>
> binmode($fh, ":utf8");
>
> }
>
>
>
> Note that I have done testing on other file handles and this appears to
> affect everything. Possibly I am doing something wrong and need to make
> Log4Perl more aware of threads? The get_logger calls within the
> subroutine are there to simulate the usage of my program, and are
> possibly not the ideal use?
>
>
>
> Please let me know, great tool otherwise!
>
>
>
> -Pat
>
>
>
>
>
>
|