0

ファイルではなくデータベースに書き込むように、デフォルトの CakePHP Log() 関数をオーバーライドする必要があります。$this->Log("blah")これが良いアイデアであるかどうかは気にしません。まず、行ったときに何が起こるかをオーバーライドする方法と、app_controller または他のクラス内でログ テーブル要素フォームを参照する方法を知りたいだけです。でオーバーライドを実行します。

4

1 に答える 1

2

まず、データベースにログを保存するテーブルを作成します。

CREATE TABLE IF NOT EXISTS `logs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `message` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

app/modelディレクトリに というファイルを作成し、次のlog.phpコードを入れます。

<?php

class Log extends AppModel {

    var $name = 'Log';

    function write($type, $message) {
        $this->save(array(
            'Log' => array(
                'type' => $type,
                'message' => $message
            )
        ));
    }

}

これはログ エンジンですが、モデルでもあるため、別のデータ ソースまたはテーブルを使用するようにカスタマイズできます。唯一の要件は、これらのパラメーターを受け入れる書き込み関数です。

このコードを編集app/config/bootstrap.phpして、ファイルの最後に追加します。

App::Import('Model','Log');

CakeLog::config('otherFile', array(
    'engine' => 'Log',
    'model' => 'Log',
));

ログを使用できるようになりました$this->log($type, $message);または$this->log($message);エラータイプにデフォルト設定されています。

CakePHP のマニュアルには、カスタム ロギングエンジンの作成に関する情報がいくつかあります。

于 2013-05-03T14:56:34.123 に答える