2

私は奇妙な状況を経験しています。

私のアプリケーションは、多くのトレース ログをファイルに記録します。(正確な方法はわかりませんが、フレームワークのロガーを使用しています。ただし、これを確認できます)

問題は、アプリケーションが致命的なエラー (致命的なもののみ) によって終了した場合[例 - 「致命的なエラー: 非オブジェクトでのメンバー関数 someFunction() の呼び出し」] 、ログがなくなることです。私のスクリプトの実行中にはるかに早く記録されました。

(はい、ログをフラッシュしようとしましたが、これも役に立ちません。致命的なエラーによるアプリケーションの終了のようで、アプリケーションの以前の時点で行われたファイルへの書き込みが何らかの形でキャンセルされます。

ここで何が起こっているのですか?

ありがとうございました

4

2 に答える 2

3

致命的なエラーは...まあ...致命的:スクリプトの実行を停止し、実行されるべきことは何も実行されません。


あなたの場合、ロギングフレームワークがメモリにログインしていると思います。このメモリ内ログは、リクエストの処理が完了したときにのみファイルに書き込まれます。
一部のロギングメカニズムは、応答の生成中のさまざまな時点で、ファイルへの書き込みを数回回避するために(つまり、ファイルをロックしたままにして、同時実行の問題を回避するために)、またはopening-closeing-reopening-recloseing-...itを実行します。 )。

致命的なエラーが発生すると、応答の生成の最後に実行する必要のある通常の操作は呼び出されないため、メモリ内ログはファイルに書き込まれません。

さて、確実に知る唯一の方法は、フレームワークのロギングメカニズムを調べることです;-)

于 2011-03-30T22:08:28.420 に答える
0

どうやら、パスカルが言及した致命的なエラーの致命的は、100%致命的ではありません。

以下では、致命的なエラーが発生した場合でもログを記録できます。

function correctShutdown()
{
   logger->flush();
}

register_shutdown_function('correctShutdown');
于 2011-03-30T23:07:43.927 に答える