>  기사  >  백엔드 개발  >  PHP 오류 로깅 공유

PHP 오류 로깅 공유

小云云
小云云원래의
2018-05-23 17:01:121750검색

PHP 개발자의 경우 제품을 사용하고 나면 가장 먼저 해야 할 일은 이러한 오류로 인해 공개되는 경로, 데이터베이스 연결, 데이터 테이블 및 기타 정보로 인해 해커의 공격을 피하기 위해 display_errors 옵션을 끄는 것입니다.
제품을 사용하고 나면 필연적으로 오류 메시지가 표시되는데, 개발자에게 매우 유용한 이 정보를 어떻게 기록해야 할까요?
PHP의 log_errors를 켜기만 하면 됩니다. 기본적으로 Apache의 error.log 파일과 같은 웹 서버의 로그 파일에 기록됩니다.
물론 특정 파일에 오류 로그를 기록할 수도 있습니다.

# vim /etc/php.ini
display_errors = Off
log_errors = On
error_log = /var/log/php-error.log
另外也可以设定error_log = syslog,使这些错误信息记录到操作系统的日志里。

----------------------------------------------- -- ----------
PHP 오류 로그 PHP 개발자의 경우, 제품을 사용하면 즉시 display_errors 옵션을 꺼서 경로, 데이터베이스 연결, 데이터 테이블 등이 공개되는 것을 방지해야 합니다. 이러한 오류가 발생했습니다. 하지만 어떤 제품을 사용하고 나면 필연적으로 오류가 발생하기 마련인데, 개발자에게 유용한 일부 오류 보고서를 기록하는 방법은 무엇일까요? 별도의 텍스트 파일에 오류를 기록할 수 있습니다. 오류 로그 기록은 개발자나 관리자가 시스템에 문제가 있는지 확인하는 데 도움이 될 수 있습니다. 프로그램의 오류 보고서를 오류 로그에 기록해야 하는 경우 PHP 구성 파일에서 log_errors 구성 지시어를 활성화하면 됩니다. 오류 보고서는 기본적으로 웹 서버의 로그 파일(예: Apache 서버의 오류 로그 파일 error.log)에 기록됩니다. 물론, 오류 로그를 지정된 파일에 기록하거나 시스템 syslog로 보낼 수도 있는데, 이는 다음과 같이 소개됩니다.
1. 지정된 파일을 사용하여 오류 보고서 로그를 기록합니다.
지정된 파일을 사용하여 오류를 기록합니다. 보고서 로그 지정된 파일을 사용하여 오류 보고서 로그 기록 지정된 파일을 사용하여 오류 보고서 로그 기록 자체 지정 파일을 사용하여 오류 로그를 기록하는 경우 이 파일을 문서 루트 디렉터리 외부에 저장하여 오류가 발생할 가능성을 줄이십시오. 공격했다. 그리고 파일은 PHP 스크립트를 실행하는 사용자(웹 서버 프로세스의 소유자)가 작성해야 합니다. Linux 운영 체제에서는 /usr/local/ 디렉터리의 error.log 파일이 오류 로그 파일로 사용되고 웹 서버 프로세스 사용자에게 쓰기 권한이 설정되어 있다고 가정합니다. 그런 다음 PHP 구성 파일에서 error_log 지시문의 값을 오류 로그 파일의 절대 경로로 설정합니다.
다음과 같이 php.ini의 구성 지침을 수정해야 합니다.
1.error_reporting = E_ALL; 발생하는 모든 오류는 PHP에 보고됩니다.
2.display_errors = Off; 표시되지 않음 Report
3. log_errors = On ; 로그 문장 기록 위치 결정
4. log_errors_max_len = 1024 ; error_log = /usr/local/error.log ; 작성할 보고서를 위와 같이 로그 파일 위치
PHP 구성 파일로 설정한 후 웹 서버를 다시 시작합니다. 이런 방식으로 PHP 스크립트 파일을 실행할 때 생성된 모든 오류 보고서는 브라우저에 표시되지 않지만 사용자가 지정한 오류 로그 /usr/local/error.log에 기록됩니다. 또한, error_reporting에 정의된 규칙을 만족하는 모든 오류를 기록할 수 있을 뿐만 아니라, PHP의 error_log() 함수를 사용하여 사용자가 정의한 오류 메시지를 보낼 수도 있습니다.
이 함수의 프로토타입은 다음과 같습니다.
1. bool error_log ( string message [, int message_type [, string Destination [, string extra_headers]] )
이 함수는 웹 서버의 오류 로그 파일에 오류 정보를 보내거나 특정 TCP 서버 또는 지정된 파일로. 이 함수는 성공하면 TRUE를, 실패하면 FALSE를 반환합니다. 첫 번째 매개변수 메시지는 필수이며, 이는 전송할 오류 메시지입니다. 이 매개변수만 사용하는 경우 구성 파일 php.ini에 설정된 위치로 메시지가 전송됩니다. 두 번째 매개변수 message_type은 정수 값입니다. 0은 운영 체제의 로그로 보내는 것을 의미하고, 1은 PHP의 Mail() 함수를 사용하여 메시지를 이메일 주소로 보내는 것을 의미하며 네 번째 매개변수 extra_headers도 사용됩니다. 2는 TCP 서버로 오류 메시지를 보내는 것을 의미합니다. 이때 세 번째 매개 변수인 대상은 대상 IP와 포트를 나타냅니다. 3. 정보를 파일 대상에 저장합니다.
오라클 데이터베이스에 로그인하는 문제를 예로 들면, 이 기능의 사용법은 다음과 같습니다.

1. <?php 
2. if(!Ora_Logon($username, $password)){ 
 3. error_log("Oracle数据库不可用!", 0); //将错误消息写入到操作系统日志中 
4. } 
5. if(!($foo=allocate_new_foo()){ 
6. error_log("出现*烦了!", 1, ". mydomain.com"); //发送到管理员邮箱中 
7. } 
8. error_log("搞砸了!", 2, "localhost:5000"); //发送到本机对应5000端口的服务器中 
9. error_log("搞砸了!", 3, "/usr/local/errors.log"); //发送到指定的文件中 
10. ?>

2、 错误信息记录到操作系统的日志里
错 误信息记录到操作系统的日志里错误信息记录到操作系统的日志里错误信息记录到操作系统的日志里 错误报告也可以被记录到操作系统日志里,但不同的操作系统之间的日志管理有点区别。在Linux上错误语句将送往syslog,而在Windows上错误 将发送到事件日志里。如果你不熟悉syslog,起码要知道它是基于UNIX的日志工具,它提供了一个API来记录与系统和应用程序执行有关的消息。 Windows事件日志实际上与UNIX的syslog相同,这些日志通常可以通过事件查看器来查看。如果希望将错误报告写到操作系统的日志里,可以在配 置文件中将error_log指令的值设置为syslog。
具体需要在php.ini中修改的配置指令如下所示: 
1. error_reporting = E_ALL ;将会向PHP报告发生的每个错误 
2. display_errors = Off ;不显示 满足上条指令所定义规则的所有错误报告 
3. log_errors = On ;决定日志语句记录的位置 
4. log_errors_max_len = 1024 ;设置每个日志项的最大长度 
5. error_log = syslog ;指定产生的错误报告写入操作系统的日志里 
除了一般的错误输出之外,PHP还允许向系统syslog中发送定制的消息。虽然通过前面介绍的error_log()函数,也可以向syslog中发送定制的消息,但在PHP中为这个特性提供了需要一起使用的4个专用函数。
分别介绍如下: 
define_syslog_variables() 
在使用openlog()、syslog及closelog()三个函数之前必须先调用该函数。因为在调用该函数时,它会根据现在的系统环境为下面三个函数初使用化一些必需的常量。 
openlog() 
打开一个和当前系统中日志器的连接,为向系统插入日志消息做好准备。并将提供的第一个字符串参数插入到每个日志消息中,该函数还需要指定两个将在日志上下文使用的参数,可以参考官方文档使用。 
 syslog()
该 函数向系统日志中发送一个定制消息。需要两个必选参数,第一个参数通过指定一个常量定制消息的优先级。例如LOG_WARNING表示一般的警 告,LOG_EMERG表示严重地可以预示着系统崩溃的问题,一些其他的表示严重程度的常量可以参考官方文档使用。第二个参数则是向系统日志中发送的定制 消息,需要提供一个消息字符串,也可以是PHP引擎在运行时提供的错误字符串。 
closelog()
该函数在向系统日志中发送完成定制消息以后调用,关闭由openlog()函数打开的日志连接。 
如果在配置文件中,已经开启向syslog发送定制消息的指令,就可以使用前面介绍的四个函数发送一个警告消息到系统日志中,并通过系统中的syslog解析工具,查看和分析由PHP程序发送的定制消息,如下所示: 

1. 
2. define_syslog_variables(); 
3. openlog("PHP5", LOG_PID , LOG_USER); 
4. syslog(LOG_WARNING, "警告报告向syslog中发送的演示, 警告时间:".date("Y/m/d H:i:s")); 
5. closelog(); 
6. ?>

相关推荐:

nginx php-fpm 输出php错误日志的配置方法

记录PHP错误日志 display

详解PHP错误日志的获取方法_PHP

위 내용은 PHP 오류 로깅 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.