Windowsでのsyslog
定数名 | Linux | Windows | |
LOG_EMERG | 0 | 1 | |
LOG_ALERT | 1 | 1 | |
LOG_CRIT | 2 | 1 | |
LOG_ERR | 3 | 4 | |
LOG_WARNING | 4 | 5 | |
LOG_NOTICE | 5 | 6 | |
LOG_INFO | 6 | 6 | |
LOG_DEBUG | 7 | 6 |
defineされている値が違う。
Windowsではイベントログでsyslogがエミュレートされる。
PHP マニュアル - syslog
<?php syslog(LOG_EMERG, 'emerg'); syslog(LOG_ALERT, 'alert'); syslog(LOG_CRIT, 'crit'); syslog(LOG_ERR, 'err'); syslog(LOG_WARNING, 'warning'); syslog(LOG_NOTICE, 'notice'); syslog(LOG_INFO, 'info'); syslog(LOG_DEBUG, 'debug'); ?>
とすると、[スタート]->[コントロールパネル]->[管理ツール]->[イベントビューア]のアプリケーションのログを見るとズラズラ記録されている。
PHPソ−スのwin32/wsyslog.cのvoid syslog(int priority, const char *message, ...)を見ると
switch (priority) { /* translate UNIX type into NT type */ case LOG_ALERT: etype = EVENTLOG_ERROR_TYPE; evid = PHP_SYSLOG_ERROR_TYPE; break; case LOG_INFO: etype = EVENTLOG_INFORMATION_TYPE; evid = PHP_SYSLOG_INFO_TYPE; break; default: etype = EVENTLOG_WARNING_TYPE; evid = PHP_SYSLOG_WARNING_TYPE; }
Windowsのイベントログは「エラー」「警告」「情報」の3種類しかないっぽい。
priorityを弄っても「警告」として処理されるようである。
なぜこんなことを書いたかというと、昨日のエントリ Ethna CacheManager キャッシュが見つからないときとかを書いてて、昔、開発環境がオールWindowsだった時に、Ethnaで'log_level'=>'notice'としていたら、Ethna_Loggerはこの定数をログレベルのマスクに使用してるため、notice以上指定なのにdebug用のSQLがズラズラ記録されて、BoBpp氏と一緒に困ってたのを思い出したから。