• このエントリーをはてなブックマークに追加

Comment

  1. お尋ねします。
    まったく同じ構成で、同じファイルをコピーするだけで、置き換えられるんですか?

    例えば、他の部分はそのまま利用して、$messageだけ編集してそのままwrite等に渡してやりたいのですが。

    • コメントありがとうございます。
      そうですね。本文通りコピーするとクラスは同じ名前で置き換えることができます。
      ただし、writeに渡される$messageは"CakeLog::write"や"$this->log"から渡されるメッセージ(ログ)そのものですので、コントローラ側で編集することになると思います。

    • 早速のレス、ありがとうございます。
      Cakephpと、オブジェクト指向がまだ良くわかっていないのですが、
      これは、FileLog.phpを lib/Cake/Log/Engine から、全然読まなくなることになるのでしょうか?

      そうすると、writeメソッドだけを置き換えたいということは、無理なんですか?(必要な部分だけを置き換えたいのです)
      「class appFileLog extends FileLog {」とかしても、大丈夫なのでしょうか?
      他の「CakeLog::alert」とか、「CakeLog::debug」とかにも影響させるられるのでしょうか?

      自分でもまったく同じファイルを置いて、メッセージ内容を置き換えて見るところまでは上手くいきました。

    • いろいろ考え直した結果、
      appContorol.php で、編集するようにメソッド追加した方が良く思えてきたので、そちらにしました。

      しかし、"/app/Lib"については、詳しく知りたいですね。
      ソースも解析してみますが、ここを上手に利用している人がいないか探してみます。

      ありがとうございました。

    • やり方としては2通りあるかと思います。
      1) オーバーライドする
      /lib/Cake/Log/Engine/FileLog.phpを/app/Lib/Log/Engine/FileLog.phpと丸々コピーして変更したい部分だけ編集する。

      2) ログエンジンを新たに作成する
      こうやると、CakeLog::alertやCakeLog::debugもappFileLogを継承することになるので、write部分だけ変更可能です。

      // app/Lib/Log/Engine/appFileLog.php
      App::uses('BaseLog', 'Log/Engine');
      class appFileLog extends BaseLog {
          public function write($type, $message) {
              // do something
          }
      }
      
      // app/Config/bootstrap.php
      CakeLog::config('debug', array(
          'engine' => 'AppFile',    // ログエンジンをFileLog->appFileLogへ変更
          'types' => array('notice', 'info', 'debug'),
          'file' => 'debug',
      ));
      CakeLog::config('error', array(
          'engine' => 'AppFile',    // ログエンジンをFileLog->appFileLogへ変更
          'types' => array('warning', 'error', 'critical', 'alert', 'emergency'),
          'file' => 'error',
      ));
      

Message

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.

    PAGE TOP ↑