2008-08-21 17 views
11

오류를 예외로 변환하는 방법을 알아 냈습니다. 오류가 잡히지 않으면 멋지게 표시하지만 유용한 방법으로 오류를 기록하는 방법을 모르겠습니다. 단순히 파일에 쓰는 것만으로는 유용하지 않습니다. 그리고 예외를 일으킨 원인을 아직 모를 때 데이터베이스에 액세스 할 위험이 있습니까?PHP에서 캐치되지 않는 예외를 어떻게 기록합니까?

답변

5

로깅을 위해 실제로는 log4php을 좋아하지만 아직 인큐베이터에서 빠져 나오지는 않습니다. 나는 거의 모든 것에 log4net을 사용하고, 나에게 자연스러운 스타일을 발견했다.

시스템 충돌과 관련하여 여러 목적지 (예 : 잘못되었을 때만 작동하는 임계 값이 임계 또는 오류 인 애펜더가 있음)에 오류를 기록 할 수 있습니다. 필자는 데이터베이스가 다운 된 경우 어떻게 appender가 실패하는지에 대해 기존의 appenders가 얼마나 안전한지 확신하지 못합니다. 그러나 로그 할 수없는 경우 정상적으로 실패 할 자체 appender를 쉽게 작성할 수 있습니다.

+0

log4php에는 훌륭한 기능이 있지만 저에게는 매우 느립니다! – JohnM2

+0

이제 보육 센터에 없으므로 URL이 http://logging.apache.org/log4php/ – Mike

11

set_error_handler을 사용하여 오류를 기록하기 위해 사용자 지정 예외를 설정할 수 있습니다. 나는 개인적으로 기본 예외 처리기의 백 트레이스가 원인에 대한 정보를 제공 할 수 있기 때문에 데이터베이스에 저장하는 것을 고려할 것입니다. 데이터베이스 처리기가 예외를 트리거 한 경우 물론 이것은 가능하지 않습니다.

error_log을 사용하여 오류를 기록 할 수도 있습니다.

가의 error_log 구성 지시어로 설정 한 내용에 따라, 운영 체제의 시스템 로깅 메커니즘 또는 파일을 사용하여, PHP의 시스템 로그

  1. error_log에서 인용 : 그것은 포함하여 메시지 목적지를 선택할 수 있습니다. 이것은 기본 옵션입니다.
  2. 대상 매개 변수의 주소로 전자 메일로 보냄. 이것은 네 번째 매개 변수 인 extra_headers가 사용되는 유일한 메시지 유형입니다.
  3. 파일 대상에 추가됩니다. 개행 문자는 메시지 문자열의 끝에 자동으로 추가되지 않습니다.

편집 : 인하는 밑줄을위한 noparse 태그가 있습니까?

3

간단히 파일에 쓰는 것이 유용하지 않습니까?

는 그러나 물론 그것은이다 - 즉 화면에 표시보다 훨씬 더 잘 할 수있는 좋은 일입니다. 사용자에게 "죄송합니다. 우리는 놀랐습니다. 엔지니어에게 통보되었습니다. 돌아가서 다시 시도하십시오."라고 말하면서 보안상의 위험이 있으므로 기술적 인 세부 사항은 절대 표시하지 말아야합니다. 공유 사서함에 전자 메일을 보내고 나중에 검토 할 수 있도록 예외를 파일 또는 DB에 기록 할 수 있습니다. 이것은 최선의 방법 일 것입니다.

0

나는 그것이 당신의 오류가 발생한 곳마다 많이 달려 있다고 생각합니다. DB를 로그 다운하는 것이 좋은 생각이 아닙니다.)

오류를 기록하는 데 syslog() 함수를 사용하지만, 시스템에없는 경우 파일에 쓰는 데 아무런 문제가 없습니다. syslog 지원. 예를 들어 logwatch 또는 the standard syslogd을 사용하여 전자 메일이나 jabber 메시지를 보내도록 시스템을 쉽게 설정할 수 있습니다.

1

파일에 기록하고 파일 크기 또는 마지막으로 수정 한 날짜의 변경 사항을 확인하기 위해 모니터링 시스템을 설정할 수 있습니다. Webmin은 쉬운 방법이지만 더 완벽한 소프트웨어 솔루션이 있습니다.

일회성 오류를 알고 있다면 알림 이메일을 보내면됩니다. 그러나 분당 많은 조회수 웹 사이트에서 이메일을 보내지 마십시오. 나는 시스템이 데이터베이스에 연결할 수 없다는 말을하기 위해 분당 수백 개의 이메일을 생성함으로써 웹 사이트가 다운되는 것을 보았습니다. 모든 새 메시지에 대해 메일 서버가 실행되고 있기 때문에 LoadAvg가> 200이라는 사실도 전혀 도움이되지 않았습니다. 그 경우 가장 좋은 시나리오는 멀리 떨어져있어 파일 크기를 확인하고 외부 서비스에 연결하여 SMS (IM)를 보내거나 외부 시스템에서 웹 페이지에 오류 메시지가 있는지 확인하는 것입니다. 화면에 표시 할 필요는 없습니다. HTML 주석에있을 수 있습니다.

0

두 번째 log4php입니다. 나는 전형적으로 예외와 같은 것들을 ERROR 나 CRITITCAL로 보내고 그것들을 syslog에 기록하도록 설정했다. 거기에서 syslog를 Zenoss, Nagios, Splunk 또는 syslog가 말할 수있는 다른 것으로 공급할 수 있습니다.

0

Google 양식을 사용하여 PHP 예외를 포착하고 기록 할 수도 있습니다. 이 과정을 설명하는 자습서 here이 있습니다.

+5

+1로 변경되어 중요한 데이터에 대한 Google의 기존 독점에 추가 할 것을 제안합니다. –