Opened 15 years ago
Closed 14 years ago
#2663 closed enhancement (fixed)
DBエラーを検知する仕組み
Reported by: | yuki | Owned by: | kiwa |
---|---|---|---|
Priority: | minor | Milestone: | OpenPNE2.13.2 |
Component: | 指定しない | Version: | |
Keywords: | Cc: |
Description (last modified by )
■概要
OpenPNE側にDBエラーを検知する仕組みを追加。
■仕様
エラーハンドラを使用して検知する仕組みを用意する。
config.phpに追加した、
// DBエラーログ出力を出力するかどうか // TRUE:出力する FALSE:出力しない define('OPENPNE_DB_ERROR_LOG',true);
の OPENPNE_DB_ERROR_LOG を true にすることで、DBエラー発生時は常に OPENPNE_VAR_DIR/log/db_errors.log に書き出される。
■関連情報
元のdescription
以下
http://sns.openpne.jp/?m=pc&a=page_fh_diary&target_c_diary_id=17362
からの転記です。
現在のOpenPNEだと、phpエラーは検知する仕組みはありますが、 DBエラーが起こった場合にログを取得出来ません。 ユーザからの報告でデータエラーが判明した後、myisamchkでチェックしてわかりましたが、アプリ側でもDBエラーを検知する仕組みが欲しいです。 以上よろしくお願いいたします。
Change History (16)
comment:1 Changed 15 years ago by
comment:2 Changed 15 years ago by
エラーハンドラを使用して検知する修正パッチは以下のようになるとおもいます。
OPENPNEのDEBUGモード設定により画面にも表示するようにいたしました。
また、DBエラー発生時は常に
OPENPNE_VAR_DIR/log/db_errors.log
こちらに書き出すようにいたしました。
Index: config.php.sample =================================================================== --- config.php.sample (リビジョン 7552) +++ config.php.sample (作業コピー) @@ -525,4 +525,9 @@ // ただしau端末の場合はこの設定にかかわらず、常に「ページのキャッシュをさせないヘッダ」が送信されます define('OPENPNE_SEND_NO_CACHE_HEADER', false); +// DBエラーログ出力を出力するかどうか +// TRUE:出力する FALSE:出力しない +define('OPENPNE_DB_ERROR_LOG',true); +define('db_error_log', OPENPNE_VAR_DIR . '/log/db_errors.log'); + ?> Index: webapp/init.inc =================================================================== --- webapp/init.inc (リビジョン 7552) +++ webapp/init.inc (作業コピー) @@ -83,6 +83,26 @@ require_once 'OpenPNE/Auth.php'; require_once 'OpenPNE/Config.php'; + +require_once 'Log.php'; + +//エラーハンドルの指定 +PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'db_error_handler'); + +//エラー処理 +function db_error_handler($error){ + //DB_ERRORかどうかの判断 + if ($error->getType() != 'db_error') return; + + //LOG出力処理 + $msg = sprintf("msg:-> %s\t info:-> %s",$error->getMessage(),$error->getUserInfo()); + if (OPENPNE_DB_ERROR_LOG){ + $file =& Log::singleton('file', db_error_log, 'db', null, PEAR_LOG_ERR); + $file->log($msg, PEAR_LOG_ERR); + } + openpne_display_error($msg); +} + // DBから設定読み込み $config =& OpenPNE_Config::getInstance(); $config->db_load_config();
comment:5 Changed 15 years ago by
Milestone: | → OpenPNE2.13.2 |
---|---|
Summary: | DBエラーを検地する仕組み → DBエラーを検知する仕組み |
comment:9 Changed 14 years ago by
Keywords: | 差し戻し added; 確認中 removed |
---|
- 定数 db_error_log は大文字にした方がいいでしょう
- スペースの記述方法などコーディング規約に沿っていない箇所があります
- エラーハンドラの登録は、PEAR::DBのインスタンスに対してのみおこないたいです
comment:10 Changed 14 years ago by
Keywords: | 確認中 added; 差し戻し removed |
---|
comment:11 Changed 14 years ago by
エラーの種類を区別せずにスクリプトの実行を停止してしまうのは問題だと思われるので、 r8193 でログの出力のみに限定するよう修正しました。
comment:12 Changed 14 years ago by
Owner: | changed from nobody to kiwa |
---|---|
Status: | new → assigned |
comment:13 Changed 14 years ago by
Keywords: | 差し戻し added; 確認中 removed |
---|
- Descriptionを最新の情報にしてください
- OpenPNE_Config が更新されていません
comment:14 Changed 14 years ago by
Description: | modified (diff) |
---|---|
Keywords: | 確認中 added; 差し戻し removed |
r8245 で修正しました。Description もあわせて書き換えました。
comment:15 Changed 14 years ago by
Keywords: | テスト待ち added; 確認中 removed |
---|
comment:16 Changed 14 years ago by
Keywords: | テスト待ち removed |
---|---|
Resolution: | → fixed |
Status: | assigned → closed |
確認しました。問題なさそうです。
Note: See
TracTickets for help on using
tickets.
エラーハンドラを使って検知すると、SQLの詳細までは取得できない???
http://ml.php.gr.jp/pipermail/php-users/2001-September/002040.html
http://ml.php.gr.jp/pipermail/php-users/2001-September/002080.html
色々調べた際に出てきたURL↑