yoshidamさんのsyslogライブラリにバグがあるようです. 
ruby -r syslog -e 'Syslog::syslog(Syslog::LOG_INFO, "%s")'
でsegvをくらいます(Linuxです). 

Syslog::syslog(syslog_syslog) -> syslog -> vsprintfで
落ちているようだったので, %なんとかの数を数えるのも不毛だし
rb_f_sprintfを使うように変更してみたところ落ちなくなりました. 
いちおうpatchを付けてみます. 

# …が, その後で気付いたのですがそれってのは
# こっち http://www.ruby-lang.org/en/raa-list.rhtml?name=Syslog
# のsyslogライブラリとほぼ同じなんですね(^_^;
# どちらのsyslogを使うのがよいのだろう. 

-- 

 やまだ あきら <URL:http://arika.org/ruby/>
 (akira / arika.org, akira / debian.org or akira / ruby-lang.org)

 

--- syslog.c~ Tue Aug 8 15:43:54 2000 +++ syslog.c Tue May 29 03:03:26 2001 @@ -38,63 +38,17 @@ { VALUE priority; VALUE format; - VALUE arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8; - int count; + VALUE arg[10]; + int count, i; - count = rb_scan_args(argc, args, "29", &priority, &format, - &arg0, &arg1, &arg2, &arg3, &arg4, &arg5, - &arg6, &arg7, &arg8); + count = rb_scan_args(argc, args, "29", &priority, &arg[0], + &arg[1], &arg[2], &arg[3], &arg[4], &arg[5], + &arg[6], &arg[7], &arg[8], &arg[9]); Check_Type(priority, T_FIXNUM); - Check_Type(format, T_STRING); - count -= 2; - switch (count) { - case 0: - syslog(FIX2INT(priority), RSTRING(format)->ptr); - break; - case 1: - syslog(FIX2INT(priority), RSTRING(format)->ptr, - value(arg0)); - break; - case 2: - syslog(FIX2INT(priority), RSTRING(format)->ptr, - value(arg0), value(arg1)); - break; - case 3: - syslog(FIX2INT(priority), RSTRING(format)->ptr, - value(arg0), value(arg1), value(arg2)); - break; - case 4: - syslog(FIX2INT(priority), RSTRING(format)->ptr, - value(arg0), value(arg1), value(arg2), - value(arg3)); - break; - case 5: - syslog(FIX2INT(priority), RSTRING(format)->ptr, - value(arg0), value(arg1), value(arg2), - value(arg3), value(arg4)); - break; - case 6: - syslog(FIX2INT(priority), RSTRING(format)->ptr, - value(arg0), value(arg1), value(arg2), - value(arg3), value(arg4), value(arg5)); - break; - case 7: - syslog(FIX2INT(priority), RSTRING(format)->ptr, - value(arg0), value(arg1), value(arg2), - value(arg3), value(arg4), value(arg5), - value(arg6)); - break; - case 8: - syslog(FIX2INT(priority), RSTRING(format)->ptr, - value(arg0), value(arg1), value(arg2), - value(arg3), value(arg4), value(arg5), - value(arg6), value(arg7)); - case 9: - syslog(FIX2INT(priority), RSTRING(format)->ptr, - value(arg0), value(arg1), value(arg2), - value(arg3), value(arg4), value(arg5), - value(arg6), value(arg7), value(arg8)); - } + Check_Type(arg[0], T_STRING); + count -= 1; + + syslog(FIX2INT(priority), STR2CSTR(rb_f_sprintf(count, arg))); return Qnil; }