2011-12-08 4 views
3

나는 아래 매우 간단한 로거 클래스가, 내 목표는 로그 함수 호출을하고 로그 파일에 데이터를 기록 만에 상관없이 내가 로그 기능PHP에서 Logger에 Static 메소드 또는 Object를 사용하는 것이 더 낫습니까?

session_start(); 
class JD{ 
    static private $log = array(); 

    public function __construct(){ } 

    // Simple logger 
    // usage JD::log('debug', 'MySQLi Database Driver Initialized'); 
    public static function log($mode, $message){ 
     self::$log[] = '[' .$mode. '] = ' .$message. '\r\n'; 
     $_SESSION['jdlog'] = self::$log; 

    } 
} 
에게 전화를 몇 번이나 페이지 당 1 개 쓰기를하지 않습니다 것입니다

위의 간단한 코드를 기반으로 테스트

JD::log('debug', 'MySQLi Database Driver Initialized'); 
JD::log('debug2', 'MySQLi Database Driver Initialized'); 
JD::log('debug3', 'MySQLi Database Driver Initialized'); 
JD::log('debug4', 'MySQLi Database Driver Initialized'); 
JD::log('debug5', 'MySQLi Database Driver Initialized'); 
JD::log('debug6', 'MySQLi Database Driver Initialized'); 
print_r($_SESSION['jdlog']); 

좋아, 내가했던 것처럼 단지 정적 인 방법을 사용하는 것이 좋을 것으로 나타납니다하지만 파일에 로그 메시지의 배열을 작성 걸려 또는 어딘가에, 그래서 위의 내 현재 방법으로, 그것을 하나의 함수 호출마다 파일에 써야 할 것이다. 각 호출을 배열로 저장하는 ose.

일반 클래스 객체로 만들면 객체를 인스턴스화하고 필요에 따라 내 로그 함수를 호출 한 다음 배열을 파일에 쓰는 다른 함수를 호출하여 페이지 끝에 하나를 쓰고, 세션 저장도 취소 할 수 있습니다.

어떻게 이런 간단한 작업을 수행 할 수 있습니까?

답변

1

스크립트 실행이 끝날 때 파일 쓰기를 처리하기위한 소멸자 메서드를 작성할 수 있습니다.

+0

안녕하세요, 좋은 생각입니다. 소멸자를 사용해 본 적이 한번도 없었습니다. 감사합니다. – JasonDavis

0

본질적으로 휘발성이기 때문에 특히 중요한 메시지를 로깅하는 경우 로그 데이터를 저장하는 세션 기능을 신뢰하지 않을 것입니다. 아이디어가 있으시면 Zend_Log 코드를 보시기 바랍니다.

솔직히 말해서 스크립트를 갑자기 중지하고 쓰기가 발생하지 않는 경우 많은 것을 저장하고 한 번 쓰는 것이 좋습니다.

+1

로그 메시지를 register_shutdown_function에 쓸 수 있으므로 스크립트가 종료 될 때 저장됩니다. – djot

+0

@djot :이 방법을 구현하는 것이 맞습니까? 자세한 PHP 스크립트가 데몬으로 실행되면 절대로 종료되지 않으므로 OP에서 제안하는 배열 접근 방식은 매우 큰 배열을 초래할 것이며 로그 파일을 보려고하는 모든 사용자는 메시지를보고 싶어하지 않을 것입니다. 아무것도. –

+0

내가 undestand,이 경우 그것은 HTTP 서버에 의해 트리거 된 스크립트, 그래서'register_shutdown_function()'(제 제안을위한 절차 대안)에서 완벽한 의미가 있습니다. 실제로 그 문제를 해결할 수있는 방법은 많지 않습니다 : a) httpd/server crashes; b) SIGTERM 신호는 의도적으로 httpd 프로세스로 전송됩니다. c) PHP 구문 오류 (이 경우 스크립트는 절대 실행되지 않습니다); d) 치명적인 런타임 오류. 마지막으로 - 표준 PHP 오류가 기록되고 나머지는 - 아무튼 보장 할 수 없습니다. – Narf

관련 문제