2013-05-03 2 views
0

파일 대신 데이터베이스에 쓰도록 기본 CakePHP Log() 함수를 재정의해야합니다. 나는 이것이 좋은 아이디어인지 아닌지 상관하지 않는다. 나는 단지 내가 어떻게 $this->Log("blah")이 될 때 일어나는 일들을 우선 무시할 것인지를 알고 싶다. 둘째, app_controller 나 다른 클래스 내에서 Log 테이블 요소 폼을 어떻게 참조 할 것인가? 에 재정을 수행하고CakePHP Log() 함수를 재정의하는 방법

+0

CakePHP 버전 업그레이드를 고려해야합니다. 2.x는 1.x보다 훨씬 빠릅니다. 또한 더 많은 가능성을 가지고 있습니다. 그 중 하나는 데이터베이스 로깅입니다. – noslone

+0

v1.3에서 작업해야한다고 가정 해 봅시다. –

+0

그럴 경우 강력한 검색 엔진을 사용해보십시오. [첫 번째 결과] (https://github.com/webtechnick/CakePHP-DatabaseLogger-Plugin) – noslone

답변

1

첫째, 로그를 저장하는 데이터베이스에서 테이블을 작성합니다. 그 안에 app/model 디렉토리 log.php라는 파일을 생성에서

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 ; 

을하고이 코드를 넣어 :

<?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);하는 기본값으로 로그를 사용할 수 있습니다.

custom logging 엔진을 만드는 방법에 대한 정보는 CakePHP 매뉴얼에 있습니다.

+0

감사합니다. 그것은 결국 내가 생각해 낸 해결책보다 훨씬 더 우아합니다. –

관련 문제