ホーム > php > IIS7.5上で動作するphpのエラーログをイベントログに出力する

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 タグ:
  1. コメントはまだありません。
  1. トラックバックはまだありません。