IIS7.5上で動作するphpのエラーログをイベントログに出力する
php.iniのerror_log設定を
error_log = syslog
としておくと、phpのエラーログはWindowsのイベントログに出力されるようになる…筈なのだが、私のサーバのphpはエラーをイベントログに記録していなかった。
明らかにエラーが発生するデバッグ中にエラーが記録されず気づいたものの、これが何故か、となると不明…
グーグル先生にお尋ねしたところ、このページをご紹介頂き、同様に問題を解決できたのでメモ。
そもそも上記でイベントログにエラーが記録されないのは、エラーログへの書き込み権限が不足している為。このため、ログに対する書き込み権限を必要なアカウントに付与することで、上記は解決可能、とのこと。
イベントログのアクセス権は”wevtutil”で確認することができる。
>wevtutil get-log application
name: application
enabled: true
type: Admin
owningPublisher:
isolation: Application
channelAccess: O:BAG:SYD:(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x7;;;SO)(A;;0x3;;;IU)(A;;0x3;;;SU)(A;;0x3;;;S-1-5-3)(A;;0x3;;;S-1-5-33)(A;;0x1;;;S-1-5-32-573)
logging:
logFileName: %SystemRoot%\System32\Winevt\Logs\application.evtx
retention: false
autoBackup: false
maxSize: 20971520
publishing:
fileMax: 1
このうち、”channelAccess”の部分がアクセス権を示す。面倒なのは、アカウントをSIDで表記する必要があること…うげー。
とりあえず、Network Serviceと、デフォルトのIUSRユーザであれば以下でOK。
>wevtutil set-log Application /ca:O:BAG:SYD:(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x7;;;SO)(A;;0x3;;;IU)(A;;0x3;;;SU)(A;;0x3;;;S-1-5-3)(A;;0x3;;;S-1-5-33)(A;;0x1;;;S-1-5-32-573)(A;;0x3;;;S-1-5-17)(A;;0x3;;;S-1-5-20)
ウチの環境はIISのユーザのアクセス権を細かく制御しておきたくて別ユーザにしているので、さらに後ろにSIDの指定を追加した。
わざとエラーのphpを叩いて、正常に(!?)イベントログにエラーが記録されることを確認。
カテゴリー: php