2012-01-24 10 views
3

ここで誰かが私を助けてくれることを願っています。基本的には私が更新しているロギングクラスがあります。しかし、今はexit()を処理しません。メッセージ/エラーがロガーに送信されるたびに、ファイル(オープン、書き込み、終了)に書き込むだけです。(To File)ロガーをPHPで書く最も効率的な方法は?

exit()を処理してディスク書き込みの効率を上げるにはどうすればよいでしょうか?今、私はロガークラスの__destructを見ています(fopen、fwrite、およびfcloseを呼び出すと)、これが安全か効率的かどうかはわかりません。

編集:set_error_handler()はどうですか?私は数年前にこれが非常に遅く、カスタムエラー/メッセージ(SQLの問題のような)にはあまり良くないことを覚えています。

+0

そこで問題は、あなたが '出口を使用()'や 'スクリプトで')(死んだらあなたのロガーを起動する方法ですか? –

+0

'fopen()'、 'fwrite()'、 'fclose()'ではなく、 'file_put_contents()'を考えることも考えられます。 – CD001

+0

あなたが探しているのはSeanの答えです。 'register_shutdown_function'を実装することは、コードの多くを変更することなくあなたを助けるはずです。 –

答えて

6

は、あなたがPHPのregister_shutdown_function()を見てみる必要があります。

function shutdown() 
{ 
    // .. log code here. 
} 

register_shutdown_function('shutdown'); 

あなたそれがになるという保証はありませんよう__destruct()方法を使用しないでくださいそれが呼び出されることを期待するとき呼び出されます。

error_log()に組み込まれているPHPの内容を実際のPHPエラーログファイルに書き込むこともできます(独自のロガーを作成するよりも信頼できる可能性があります)。

参考文献:

http://php.net/manual/en/function.register-shutdown-function.php

http://php.net/manual/en/function.error-log.php

+0

だけでなく、これは、効率のために、コンストラクタで一度ファイルを開き、必要に応じて、あなたの書き込みを実行し、シャットダウン機能でファイルを閉じます。 – Leigh

+0

ありがとうございます。私はそれの__constructで呼び出されたクラス内でregister_shutdown_functionを使用すると思います。この方法では、呼び出すためにロードするだけで済み、__destructよりも安全です。 – Jon

1

私はいつもいくつかのグローバル関数を使用しています。あなたのスクリプトが終了したときに何かをログに記録したい場合

function BeforeExit() { 
    //do stuff like logging 
    exit; 
} 
+0

私は、同じセッションデータを保存するなど、)(ダイ)ヘッダ(前に「構築物」、設定(新)クッキーを使用しますデータ、ロギング、ベンチマークなどを行う – djot

1

私は一週間前ロガークラスを開発しました。私は解決していた問題があった。

Post all kinds of errors (E_PARSE,E_ERROR,E_NOTICE,E_WARRNING etc..) into log file using some format methods.

すなわち:

[xxxx-xx-xx xx:xx]

User id: 123

Widget id:321

Error:"The message from PHP"

Line:345

File:test.php

私はここで見つけるPHPにある2つのエラータイプであった

  1. 厳しい(E_ERROR、E_PARSEなど)

  2. (E_WARRNING、E_NOTICE)

厳密で厳密ではない私はそれを自分で呼びましたが、それはPHPのドキュメントではありません。タイプ2のエラーはいくつかありますが、タイプ1のエラーは致命的です。 (私が見られるような)

私は上述のタイプの両方のためのエラーハンドラを使用する:

エラーハンドラ#1

//set 'shutdown_handler' function as strict error handler 
register_shutdown_function(array($this, 'shutdown_handler')); 

//what does the function look like 
public function shutdown_handler() 
{ 
    // get last occured error 
    $e = error_get_last();  
    $this->LogErrors($e['message'], $e['type'], $e['file'], $e['line']);   
} 

エラーハンドラ#2

//set 'error_handler' function as not strict error's handler 
set_error_handler(array($this, 'error_handler')); 

//what does the function look like 
public function error_handler($errno, $errstr, $errfile, $errline) 
{ 
    $this->LogErrors($errstr, $errno, $errfile, $errline); 
} 

それで、もし私は例えばスクリプトでタイプ2のエラー25、タイプ1のエラー1つで、これらのエラーはすべてログファイルに表示されます。

希望は私が参考にして明らかになった

関連する問題