2012-02-09 4 views
0

HTML 출력없이 리소스에서 데이터를 다운로드하기 위해 매일 서버에서 실행되는 스크립트가 있습니다. 기본적으로 PHP는 내 스크립트 오류를 ​​php_error.log과 NetBeans의 출력 창에 출력합니다. 나는 사용자 오류 핸들러를 만든출력 할 PHP 사용자 정의 오류 처리기 로그

는 :

// user defined error handling function 
function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars) 
{ 
    error_log($errmsg, 3, "logs/aem.log");  
    switch ($errno) { 
    case E_ERROR: 
     exit("Error grave $errmsg at $filename:$linenum"); 
     break; 
    case E_USER_ERROR: 
     exit("Error grave $errmsg at $filename:$linenum"); 
     break; 
    } 
} 

error_reporting(0); 
set_error_handler('userErrorHandler'); 

내 주요 스크립트에서이 파일을 포함하고 다 잘 간다.

내가 응용 프로그램을 개발하는 동안 Netbeans의 출력 화면에서 오류 메시지를 보면서 (기본 처리기와 마찬가지로) 오류 로그 파일을 보관하고 싶습니다. 나는 error_reporting의 값을 변경하거나 다음 값을 시도하는 추가의 error_log 기능을 추가하는 시도 :

error_reporting(E_ALL | E_STRICT); 
error_reporting(-1); 
error_log($errmsg, 0);` 

을하지만 파일에서 include('mycustomhandler');을 제거하지 않는 I 출력에 오류가 발생하지 않습니다.

표준 오류 처리기의 동작을 에뮬레이트 할 수 있습니까?

답변

1

출력을 stderr (netbeans가 분석하는 것으로 추측)으로 사용해야합니다. 예를 들면 : 로깅 오류에 대한

fprintf(STDERR, "Normal error message %s\n", "With nested info"); 

당신은 error_log()이 (어쩌면 너무 넷빈즈로 출력을 처리합니다) 또는 php.ini (ini_get())에서 error_log을 구문 분석을 시도 사용할 수 있습니다.

그러나 PHP는 내부적으로 syslog()을 사용합니다. 나는 당신이 당신의 핸들러에

+0

멋진 아이디어를 요구하고 있었는지 명중하지 않은 경우

// Logging function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars){ $logLevel = 0; $label = ''; $exit = false; switch($errno){ case E_ERROR: case E_USER_ERROR: $label = 'Critical error'; $exit = true; $logLevel = LOG_ERR; break; // ... } $message = "$label: on line ... file, error string..."; if($logLevel){ syslog($logLevel, $message); } if(!ini_get('display_error') && $exit){ die('Fatal error occured.'); } if($label){ echo $message; // You're responsible for how error is displayed } if($exit){ die(); } } error_reporting(E_ALL); 

댓글에 질문 : 같은 당신의 오류 처리기가 보일 것입니다. 커스텀 핸들러를 사용하는 주된 아이디어는 앱에 특정한 파일에 로그 할 수 있기 때문에 syslog를 사용하지 않을 것입니다. 'fprintf()'도 Netbeans 출력으로 출력하므로 핸들러에 추가 할 수 있습니다. –

+0

@DavidCasillas 그래서 netbeans는 STDERR의 출력을 구문 분석합니다. 그리고 그것들은 단지 아이디어 였고, 나는 적어도 도움이되기를 바랍니다 :). – Vyktor