2013-05-14 7 views
4

저는 1 년 넘게 저의 웹 사이트에서 일해 왔으며, 마침내 사람들이 사용할 수있게하기 위해 열심히 노력했습니다. 그러나 꽤 많이 커졌습니다. 저는 제 통제에서 거의 말하고 싶습니다. 그리고 그 위에 저는 아마추어 프로그래머에게 스스로 가르쳤습니다.PHP가 오류 로그 파일에 오류를 기록하는 방법을 변경하는 방법은 무엇입니까?

PHP가 생성하는 모든 오류가 파일에 기록되므로이 파일에 액세스하여 오류를 추적 할 수 있습니다.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', '0'); 
ini_set('log_errors', 1); 
ini_set('error_log', 'errors.log'); 
?> 
이 같은

작품 꽤 좋은 지금까지, 내하는 error.log 파일이 포함됩니다 물건 :

[14 월 2013 0시 16분

현재 내 설정은 다음과 같습니다 : 26] PHP 알림 : 정의되지 않은 변수 : 존재하지 않는 변수 /home/www/dir/index.php in 14 [14-May-2013 00:16:28] PHP 알림 : 정의되지 않은 변수 :/home/www/dir에 존재하지 않는 변수 /index.php on line 14

오류가 기록됩니다.

  1. 그들은 모두 한 줄, 아니 바꿈에 있습니다

    는하지만 지금은 문제가 있습니다. 읽을 수 없게 만듭니다. 새 줄에서 각 오류를 얻으려면 어떻게해야합니까?

  2. 타임 스탬프가 있습니다. 굉장해! 사용자의 IP 주소 또는 다른 사용자 지정 사항을 추가하는 방법은 무엇입니까?

다시 말하지만, 내 질문 :

어떻게 PHP는 오류 로그 파일에 오류를 기록하는 방법을 변경하는 방법? 특히, 기록 된 각 오류 후에 새로운 행을 작성하여 error.log 파일을 읽기 쉽게하는 방법은 무엇입니까? IP 주소와 같은 맞춤 데이터 및 값을 추가하려면 어떻게해야합니까?

답변 : 나는 다음을 수행 결국 -이 다소 표준에 의해 수행되고, 거기에서 수정 될 수있는 PHP를 재현 할 것으로 보인다.

<?php 
function my_error_handler($type, $message, $file, $line, $vars) 
{ 
    switch($type) 
    { 
     case 1: // 1 // 
      $type_str = 'ERROR'; 
      break; 
     case 2: // 2 // 
      $type_str = 'WARNING'; 
      break; 
     case 4: // 4 // 
      $type_str = 'PARSE'; 
      break; 
     case 8: // 8 // 
      $type_str = 'NOTICE'; 
      break; 
     case 16: // 16 // 
      $type_str = 'CORE_ERROR'; 
      break; 
     case 32: // 32 // 
      $type_str = 'CORE_WARNING'; 
      break; 
     case 64: // 64 // 
      $type_str = 'COMPILE_ERROR'; 
      break; 
     case 128: // 128 // 
      $type_str = 'COMPILE_WARNING'; 
      break; 
     case 256: // 256 // 
      $type_str = 'USER_ERROR'; 
      break; 
     case 512: // 512 // 
      $type_str = 'USER_WARNING'; 
      break; 
     case 1024: // 1024 // 
      $type_str = 'USER_NOTICE'; 
      break; 
     case 2048: // 2048 // 
      $type_str = 'STRICT'; 
      break; 
     case 4096: // 4096 // 
      $type_str = 'RECOVERABLE_ERROR'; 
      break; 
     case 8192: // 8192 // 
      $type_str = 'DEPRECATED'; 
      break; 
     case 16384: // 16384 // 
      $type_str = 'USER_DEPRECATED'; 
      break; 
    } 


    $errormessage = '[ '.date(r).' ] '.$type_str.': '.$message.' in '.$file.' on line '.$line."\n"; 
    // for development simply ECHO $errormessage; 

     $file = 'my_errors.log'; 
     file_put_contents($file, $errormessage, FILE_APPEND); 
} 

error_reporting(E_ALL); 
ini_set('display_errors', '0'); 
set_error_handler('my_error_handler'); 

?> 
+0

이것은 또한이 스레드에서 논의됩니다. http://stackoverflow.com/questions/30630484/is-it-possible-to-change-php-error-log-output – Salagir

+0

이것은 http : // stackoverflow에서도 논의됩니다. .com/questions/30630484/is-it-possible-to-change-php-error-log-output – Salagir

+0

이것은 또한 http : // stackoverflow에서 논의됩니다.com/questions/30630484/is-possible-to-change-php-error-log-output – Salagir

답변

3

당신은 어떤 추가 지정을하거나 내장 된 오류 처리기와 그 논리 중 하나를 구현할 수 없습니다, 당신은 set_error_handler() 함께 자신의 오류 처리기를 설정해야 할 것입니다.

이 함수는 PHP에서 오류가 발생했을 때 호출되는 콜백을 사용하므로 이에 따라 조치 할 수 있습니다.

이 함수를 사용하는 방법 및 올바른 콜백을 구현하는 방법은 문서의 예를 참조하십시오.

+0

표준/내장 오류 처리기 용 코드 사본을 얻을 수 있습니다. 기존 코드? – olli

+1

나는 그것이 당신에게 어떤 용도로든 사용될 것 같지 않습니다. 내장 된 에러 핸들러는 PHP 내부에 있기 때문에 제가 아는 한 C로 구현됩니다. – nickb

+0

도움 주셔서 감사합니다! 나는 내가했던 것을 보여주기 위해 원래의 질문에 몇 가지 코드를 추가했다. 이것이 얼마나 효과적 일지 모른다는 의견은 환영할만한 것입니다! – olli