www」という謎の文字列が一体なんなのか調べた。いいから回避策が知りたいという人はこちらへ。おまけが本編という人もいるかもしれない。発端とあるPHPアプリケーションがエラーログをPHP標準関数error_log()で吐く。Out-of-L...うーん。ここの文字列だけなら実害はないが、なんでこんなことになっているのかわからないので調べることにした。テストファイル当該のPHPアプリケーションは置いといて、1ファイルでも再現するので、以下のPHPプログラムでテストすることにする。設定値「error_log」を「syslog」にしておく。バージョンに拘っていないので、リンクが適当だったりするが気になるかたは必要なバージョンのソースを見に行ってほしい。ソースを追うerror_log()関数の流れくだんのerror_log()関数をPHPから呼び出すと、こんな感じで動く。error_logのPHP_FUNCTIONの記述がext/standard/basic_functions.cにある。ここが実体である_php_error_log_ex()を呼び出す。ext/standard/basic_functions.cの_php_error_log_ex()は、switchで引数に応じたログ出力(メールなど)を行う。たどり着き、php_log_err()を呼び出す。php_log_err()は、main/main.cにあり、ここで「error_log」変数のチェックを行い、値が「syslog」のときはphp_syslog()関数でsyslogに出力している。return;}基本的にメッセージを引き回しているだけで、ここまでに変わった文字列処理は見受けられない。php_syslog()関数とはであればポイントはphp_syslog()であろうと、php_syslog()の定義をphp_syslog.hに見つけるも、こうなっていた。なんとphp_syslog()はsyslog()であった。PHP内で何か特別な処理をすることなく、そのままsyslog()関数にメッセージを投げているだけである。syslog関数の使い方こうなってくるとsyslog(3)が大事になる。manがあり、日本語が古くないようなので日本語のsyslog(3)を見てみる。プロトタイプとしては、こうなっているようだ。呼び出しとあわせると、priorityがLOG_NOTICEで、formatが"%s"、%s部分としてlog_messageが渡ることになる。指定した文字列は各メッセージの前に付与される。www」の部分はidentのようだ。