diff options
-rw-r--r-- | IkiWiki.pm | 14 | ||||
-rw-r--r-- | t/syslog.t | 18 |
2 files changed, 30 insertions, 2 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm index eb480969b..a254177f2 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -743,6 +743,7 @@ sub debug ($) { } my $log_open=0; +my $log_failed=0; sub log_message ($$) { my $type=shift; @@ -753,9 +754,18 @@ sub log_message ($$) { Sys::Syslog::openlog('ikiwiki', '', 'user'); $log_open=1; } - return eval { - Sys::Syslog::syslog($type, "[$config{wikiname}] %s", join(" ", @_)); + eval { + # keep a copy to avoid editing the original config repeatedly + my $wikiname = $config{wikiname}; + utf8::encode($wikiname); + Sys::Syslog::syslog($type, "[$wikiname] %s", join(" ", @_)); }; + if ($@) { + print STDERR "failed to syslog: $@" unless $log_failed; + $log_failed=1; + print STDERR "@_\n"; + } + return $@; } elsif (! $config{cgi}) { return print "@_\n"; diff --git a/t/syslog.t b/t/syslog.t new file mode 100644 index 000000000..ffe8635b3 --- /dev/null +++ b/t/syslog.t @@ -0,0 +1,18 @@ +#!/usr/bin/perl +use warnings; +use strict; +use Test::More tests => 5; +use utf8; + +BEGIN { use_ok("IkiWiki"); } + +$IkiWiki::config{verbose} = 1; +$IkiWiki::config{syslog} = 1; + +$IkiWiki::config{wikiname} = 'ASCII'; +is(debug('test'), '', 'plain ASCII syslog'); +$IkiWiki::config{wikiname} = 'not â’¶SCII'; +is(debug('test'), '', 'UTF8 syslog'); +my $orig = $IkiWiki::config{wikiname}; +is(debug('test'), '', 'check for idempotency'); +is($IkiWiki::config{wikiname}, $orig, 'unchanged config'); |