Rumah > Artikel > pembangunan bahagian belakang > Ringkasan menggunakan kaedah yang berbeza untuk log laporan ralat
Dalam artikel sebelumnya, kami membawakan anda "Membawa anda memahami jenis ralat dan tahap ralat PHP", yang memperkenalkan jenis ralat dan tahap ralat dalam PHP secara terperinci Dalam artikel ini, kami Mari kita lihat konfigurasi dan penggunaan log ralat dalam PHP. Semoga ia membantu semua orang!
Dalam artikel kami sebelum ini, kami memperkenalkan pengendalian pengecualian, jenis ralat dan tahap ralat PHP Seterusnya, mari perkenalkan konfigurasi log ralat dalam PHP dan cara menggunakan ia. Untuk pembangun PHP, sebaik sahaja projek digunakan, pilihan display_errors
dalam fail konfigurasi php.ini hendaklah dimatikan serta-merta untuk mengelakkan laluan, sambungan pangkalan data, jadual data dan maklumat lain didedahkan disebabkan ralat ini.
Dalam mana-mana projek yang digunakan, ralat pasti akan berlaku Beberapa laporan ralat berguna kepada pembangun pada masa ini, kami boleh log laporan ralat melalui fail teks yang berasingan. Dengan cara ini, pembangun boleh menyemak dengan lebih mudah sama ada terdapat masalah dengan sistem. Jika anda mendayakan log_errors
dalam fail konfigurasi PHP, anda boleh menulis laporan ralat dalam program ke log ralat.
Laporan ralat ini akan direkodkan secara automatik dalam fail log pelayan Anda juga boleh menghantarnya ke syslog
sistem, iaitu log sistem. Seterusnya, mari kita lihat cara melaksanakan pengendalian ralat tersebut.
Rekod laporan ralat dengan menyatakan fail
Ingin menggunakan fail sasaran untuk merekodkan log laporan ralat, yang penting Apa yang diperlukan ialah lokasi fail yang ditentukan perlu berada di luar direktori akar dokumen Dalam kes ini, kemungkinan diserang adalah rendah, dan fail yang ditentukan perlu mempunyai kebenaran tertentu Pertama, mari kita lihat konfigurasi yang kami perlukan untuk php.ini
Apakah pengubahsuaian yang dibuat pada arahan:
<code><strong>log_errors = On</strong>
log_errors = On
<strong>log_errors_max_len = 1024</strong>
<strong>error_reporting = E_ALL</strong>
<strong>display_errors = Off</strong>
;Jangan paparkan semua laporan ralat yang memenuhi peraturan yang ditakrifkan dalam arahan sebelumnya<strong>error_log = /usr/local/error.log</strong>
<p>error_log = / usr/local/error.log<br> </p>
;Nyatakan lokasi fail log di mana laporan ralat yang dihasilkan ditulis error_reporting
error_log()
Selepas mengubah suai fail php.ini seperti yang diterangkan di atas, selepas berjaya menetapkan, jalankan fail skrip PHP Pada masa ini, laporan ralat tidak akan dipaparkan dalam pelayar Pada masa ini, laporan ralat akan dipaparkan dalam fail sasaran yang kami tetapkan, iaitu log ralat.
Selain itu, perlu diingatkan bahawa ralat yang ditakrifkan oleh error_log()
boleh direkodkan dalam fail sasaran ini, dan maklumat ralat boleh diletakkan dalam log ralat dalam pelayan atau dalam fail sasaran ini melalui fungsi
.
error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] ) : bool
Format sintaks fungsi adalah seperti berikut:
$message
$destination
Perlu diambil perhatian bahawa: $message_type
$extra_headers
$message_type
mewakili sasaran, iaitu destinasi yang mesej ralat dihantar. Maksudnya diterangkan di atas dan ditentukan oleh parameter $message_type表示
0
Menetapkan tempat ralat harus dihantar. Jenis mesej yang mungkin adalah: $message
: (Lalai) Hantar 1
ke log sistem PHP, menggunakan mekanisme pengelogan sistem pengendalian atau fail, Bergantung pada error_log yang ditetapkan fail konfigurasi; $message
: Hantar 3
ke alamat e-mel yang ditetapkan oleh parameter $destination. Parameter keempat $extra_headers hanya akan digunakan dalam jenis ini; (2 telah ditamatkan) $message
: 4
dihantar ke lokasi $ destinasi fail. Aksara $message tidak akan dianggap sebagai baris baharu secara lalai; $message
: Hantar
terus kepada pengendali log SAPI.<?php $link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db"); if (!$link) { error_log('Mysql 数据库连接失败!',0); exit(); } ?>Seterusnya, mari kita lihat log masuk ke pangkalan data Mysql sebagai contoh Apabila log masuk gagal, maklumat ralat dilog. Contohnya adalah seperti berikut: Jika kita mengambil masalah log masuk ke pangkalan data Oracle sebagai contoh, contoh penggunaan fungsi ini adalah seperti berikut:
<?php if(!Ora_Logon($username, $password)){ error_log("Oracle数据库不可用!", 0); //将错误消息写入到操作系统日志中 } if(!($foo=allocate_new_foo()){ error_log("不行!", 1, ". mydomain.com"); //发送到管理员邮箱中 } error_log("不行!", 2, "localhost:5000"); //发送到本机对应5000端口的服务器中 error_log("不行!", 3, "/usr/local/errors.log"); //发送到指定的文件中 ?>
代码运行之后就会在php.ini 配置文件中 error_log
一项所设置的目录中生成对应的错误日志文件。接下来我们看一下错误信息记录到操作系统的日志里是什么情况。
通过系统日志记录错误报告
上文中我们讲到了将使用目标文件来记录错误报告日志,接下来我们就来看一下将错误信息放到操作系统的日志里面,这是可以实现的,其中不同的操作系统,它们的日志管理也是不一样的,下面我们都是使用常见的windows举例,Windows 上错误将发送到事件日志里,可以通过事件查看器来查看。
通过什么样的方法才能够在操作系统的日志里有错误信息呢?这时候我们可以通过php.ini 配置文件中 error_log
,接下来我们看一下应该怎样修改php.ini中的配置文件。
修改error_reporting = E_ALL
用来报告所发生的每个错误;修改display_errors = Off
用来不显示满足上条指令所定义规则的所有错误报告;修改log_errors = On
用于决定日志语句记录的位置;修改log_errors_max_len = 1024
用于设置每个日志项的最大长度;修改error_log = syslog
用于指定产生的错误报告写入操作系统的日志里 。
虽然通过前面介绍的 error_log()
函数,可以向 syslog 中发送定制的消息,想要实现将错误信息放到操作系统的日志里面,我们还需要三个函数的帮助,下面我们就来简单的介绍一下:
<strong>openlog()</strong>
函数
该函数是用来打开连接的,用于向系统中写入日志信息做的准备。并且每个日志的消息中都有它的一个参数是字符串形式的。
<strong>syslog()</strong>
函数
该函数拥有两个参数,它的作用是用来给系统中的日志给一个特定消息,第一个参数就是用来设置这个消息的优先级,第二个参数即使提供字符串,这个字符串就是这个特定的消息。
<strong>closelog()</strong>
函数
该函数就是用来关闭连接的,这个连接就是上文中openlog()
函数打开的。
那么接下来我们通过示例来看一下实际操作吧,示例如下:
<?php openlog("PHP中文网", LOG_PID, LOG_USER); syslog(LOG_WARNING, "向 syslog 中发送定时消息,发送时间:".date("Y/m/d H:i:s")); closelog(); ?>
以windows系统为例,打开“此电脑”右键选择“管理”选项,进入计算机管理界面,找到图示中应用程序的选项,就能够看到我们自己定制的警告信息了。如下所示:
其中我们需要注意的是:
你所使用的Web服务器环境决定了是使用指定文件还是使用syslog记录错误日志。可以控制服务器的话就可以利用解析工具来查看和分析日志,推荐使用syslog 激励错误日志,网站在共享服务器的虚拟主机中运行,推荐使用单独的文本文件记录错误日志了。
大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。
Atas ialah kandungan terperinci Ringkasan menggunakan kaedah yang berbeza untuk log laporan ralat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!