cari
Rumahpembangunan bahagian belakangtutorial php简单的php自定义异常日志

简单的php自定义错误日志

平时经常看php的错误日志,很少有机会去自己动手写日志,看了王健的《最佳日志实践》觉得写一个清晰明了,结构分明的日志还是非常有必要的。

在写日志前,我们问问自己:为什么我们有时要记录自定义的日志呢?而不用系统默认的日志记录方式呢?

我认为有两个原因:

1.团队需要一个统一格式的日志方便管理

2.大量无用错误日志占据硬盘空间,仅需记录有意义的日志

那么,实践一下。


1.打开你的php.ini

2.打开日志记录,将

log_errors = Off

改成

log_errors = On

3.将php.ini保存退出并重启web服务器

4.在你的代码最前面加上如下代码

<span style="color: #008080;"> 1</span> <span style="color: #000000;">php</span><span style="color: #008080;"> 2</span> <span style="color: #008080;"> 3</span> <span style="color: #008000;">//</span><span style="color: #008000;">错误处理函数</span><span style="color: #008080;"> 4</span> <span style="color: #0000ff;">function</span> myErrorHandler(<span style="color: #800080;">$errno</span>, <span style="color: #800080;">$errstr</span>, <span style="color: #800080;">$errfile</span>, <span style="color: #800080;">$errline</span><span style="color: #000000;">)</span><span style="color: #008080;"> 5</span> <span style="color: #000000;">{</span><span style="color: #008080;"> 6</span>     <span style="color: #800080;">$log_file</span> = "./php_%s_log_".<span style="color: #008080;">date</span>("Ymd").".log";<span style="color: #008000;">//</span><span style="color: #008000;">定义日志文件存放目录和文件名</span><span style="color: #008080;"> 7</span>     <span style="color: #800080;">$template</span> = ''<span style="color: #000000;">;</span><span style="color: #008080;"> 8</span>     <span style="color: #0000ff;">switch</span> (<span style="color: #800080;">$errno</span><span style="color: #000000;">) {</span><span style="color: #008080;"> 9</span>     <span style="color: #0000ff;">case</span> <span style="color: #ff00ff;">E_USER_ERROR</span>:<span style="color: #008080;">10</span>         <span style="color: #800080;">$template</span> .= "用户ERROR级错误,必须修复 错误编号[<span style="color: #800080;">$errno</span>] <span style="color: #800080;">$errstr</span> "<span style="color: #000000;">;</span><span style="color: #008080;">11</span>         <span style="color: #800080;">$template</span> .= "错误位置 文件<span style="color: #800080;">$errfile</span>,第 <span style="color: #800080;">$errline</span> 行\n"<span style="color: #000000;">;</span><span style="color: #008080;">12</span>         <span style="color: #800080;">$log_file</span> = <span style="color: #008080;">sprintf</span>(<span style="color: #800080;">$log_file</span>,'error'<span style="color: #000000;">);</span><span style="color: #008080;">13</span>         <span style="color: #0000ff;">exit</span>(1);<span style="color: #008000;">//</span><span style="color: #008000;">系统退出</span><span style="color: #008080;">14</span>         <span style="color: #0000ff;">break</span><span style="color: #000000;">;</span><span style="color: #008080;">15</span> <span style="color: #008080;">16</span>     <span style="color: #0000ff;">case</span> <span style="color: #ff00ff;">E_USER_WARNING</span>:<span style="color: #008080;">17</span>         <span style="color: #800080;">$template</span> .= "用户WARNING级错误,建议修复 错误编号[<span style="color: #800080;">$errno</span>] <span style="color: #800080;">$errstr</span> "<span style="color: #000000;">;</span><span style="color: #008080;">18</span>         <span style="color: #800080;">$template</span> .= "错误位置 文件<span style="color: #800080;">$errfile</span>,第 <span style="color: #800080;">$errline</span> 行\n"<span style="color: #000000;">;</span><span style="color: #008080;">19</span>         <span style="color: #800080;">$log_file</span> = <span style="color: #008080;">sprintf</span>(<span style="color: #800080;">$log_file</span>,'warning'<span style="color: #000000;">);</span><span style="color: #008080;">20</span>         <span style="color: #0000ff;">break</span><span style="color: #000000;">;</span><span style="color: #008080;">21</span> <span style="color: #008080;">22</span>     <span style="color: #0000ff;">case</span> <span style="color: #ff00ff;">E_USER_NOTICE</span>:<span style="color: #008080;">23</span>         <span style="color: #800080;">$template</span> .= "用户NOTICE级错误,不影响系统,可不修复 错误编号[<span style="color: #800080;">$errno</span>] <span style="color: #800080;">$errstr</span> "<span style="color: #000000;">;</span><span style="color: #008080;">24</span>         <span style="color: #800080;">$template</span> .= "错误位置 文件<span style="color: #800080;">$errfile</span>,第 <span style="color: #800080;">$errline</span> 行\n"<span style="color: #000000;">;</span><span style="color: #008080;">25</span>     <span style="color: #800080;">$log_file</span> = <span style="color: #008080;">sprintf</span>(<span style="color: #800080;">$log_file</span>,'notice'<span style="color: #000000;">);</span><span style="color: #008080;">26</span>         <span style="color: #0000ff;">break</span><span style="color: #000000;">;</span><span style="color: #008080;">27</span> <span style="color: #008080;">28</span>     <span style="color: #0000ff;">default</span>:<span style="color: #008080;">29</span>         <span style="color: #800080;">$template</span> .= "未知错误类型: 错误编号[<span style="color: #800080;">$errno</span>] <span style="color: #800080;">$errstr</span>  "<span style="color: #000000;">;</span><span style="color: #008080;">30</span>         <span style="color: #800080;">$template</span> .= "错误位置 文件<span style="color: #800080;">$errfile</span>,第 <span style="color: #800080;">$errline</span> 行\n"<span style="color: #000000;">;</span><span style="color: #008080;">31</span>         <span style="color: #800080;">$log_file</span> = <span style="color: #008080;">sprintf</span>(<span style="color: #800080;">$log_file</span>,'unknown'<span style="color: #000000;">);</span><span style="color: #008080;">32</span>         <span style="color: #0000ff;">break</span><span style="color: #000000;">;</span><span style="color: #008080;">33</span> <span style="color: #000000;">    }</span><span style="color: #008080;">34</span>     <span style="color: #008080;">file_put_contents</span>(<span style="color: #800080;">$log_file</span>,<span style="color: #800080;">$template</span>,<span style="color: #000000;">FILE_APPEND);</span><span style="color: #008080;">35</span> <span style="color: #008080;">36</span>     <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;</span><span style="color: #008080;">37</span> <span style="color: #000000;">}</span><span style="color: #008080;">38</span> <span style="color: #008080;">39</span> <span style="color: #800080;">$error_handler</span> = <span style="color: #008080;">set_error_handler</span>("myErrorHandler");<span style="color: #008000;">//</span><span style="color: #008000;">开启自定义错误日志</span>

5.试着在刚才的代码后写下一段错误代码

<span style="color: #0000ff;">echo</span> 1/0;

看看你定义的路径下是否多了一个日志文件呢?:)

以下级别的错误不能由用户定义的函数来处理: E_ERROR、 E_PARSE、 E_CORE_ERROR、 E_CORE_WARNING、 E_COMPILE_ERROR、 E_COMPILE_WARNING,和在 调用 set_error_handler() 函数所在文件中产生的大多数 E_STRICT。

不过当你开启了错误日志系统(php.ini中的log_error = on)并且指定了系统日志文件(同样也是php.ini中的error_log=路径名),并且error_reporting开启了全部后,以上的错误都会作为系统错误日志而记录在你定义的文件中。

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Bagaimanakah PHP mengenal pasti sesi pengguna?Bagaimanakah PHP mengenal pasti sesi pengguna?May 01, 2025 am 12:23 AM

Phpidentifierauser'sSessionusingSessionCookiesandSessionIds.1) whensession_start () ISCALLED, phpGeneratesAuniquesessionIdstoredinacookienamedPhpsessidontheUserer'sBrowser.2) ThisIdallowsPhptoretRievesSessionDataFromtheserver.

Apakah beberapa amalan terbaik untuk mendapatkan sesi PHP?Apakah beberapa amalan terbaik untuk mendapatkan sesi PHP?May 01, 2025 am 12:22 AM

Keselamatan sesi PHP boleh dicapai melalui langkah -langkah berikut: 1. Gunakan session_regenerate_id () untuk menjana semula ID sesi apabila pengguna log masuk atau merupakan operasi penting. 2. Sulitkan ID sesi penghantaran melalui protokol HTTPS. 3. Gunakan session_save_path () untuk menentukan direktori selamat untuk menyimpan data sesi dan menetapkan kebenaran dengan betul.

Di manakah fail sesi php disimpan secara lalai?Di manakah fail sesi php disimpan secara lalai?May 01, 2025 am 12:15 AM

PhpsessionFileSarestoredIntHedirectorySpecifiedBySession.save_path, biasanya/tmponunix-likesystemsorc: \ windows \ temponwindows.tocustomethis: 1) usession_save_path ()

Bagaimana anda mengambil data dari sesi PHP?Bagaimana anda mengambil data dari sesi PHP?May 01, 2025 am 12:11 AM

ToretrievedataFromaphpsession, startTheSessionWithSsion_start () andaccessVariablesInthe $ _SessionArray.Forexample: 1) startTheSession: session_start ()

Bagaimana anda boleh menggunakan sesi untuk melaksanakan keranjang belanja?Bagaimana anda boleh menggunakan sesi untuk melaksanakan keranjang belanja?May 01, 2025 am 12:10 AM

Langkah -langkah untuk membina sistem keranjang belanja yang cekap menggunakan sesi termasuk: 1) Memahami definisi dan fungsi sesi. Sesi ini adalah mekanisme penyimpanan sisi pelayan yang digunakan untuk mengekalkan status pengguna merentasi permintaan; 2) melaksanakan pengurusan sesi asas, seperti menambah produk ke keranjang belanja; 3) memperluas penggunaan lanjutan, menyokong pengurusan kuantiti produk dan penghapusan; 4) Mengoptimumkan prestasi dan keselamatan, dengan berterusan data sesi dan menggunakan pengecam sesi yang selamat.

Bagaimana anda membuat dan menggunakan antara muka dalam PHP?Bagaimana anda membuat dan menggunakan antara muka dalam PHP?Apr 30, 2025 pm 03:40 PM

Artikel ini menerangkan cara membuat, melaksanakan, dan menggunakan antara muka dalam PHP, memberi tumpuan kepada manfaat mereka untuk organisasi kod dan penyelenggaraan.

Apakah perbezaan antara crypt () dan password_hash ()?Apakah perbezaan antara crypt () dan password_hash ()?Apr 30, 2025 pm 03:39 PM

Artikel ini membincangkan perbezaan antara crypt () dan password_hash () dalam php untuk hashing kata laluan, memberi tumpuan kepada pelaksanaan, keselamatan, dan kesesuaian untuk aplikasi web moden.

Bagaimanakah anda dapat mencegah skrip lintas tapak (XSS) dalam PHP?Bagaimanakah anda dapat mencegah skrip lintas tapak (XSS) dalam PHP?Apr 30, 2025 pm 03:38 PM

Artikel membincangkan mencegah skrip lintas tapak (XSS) dalam PHP melalui pengesahan input, pengekodan output, dan menggunakan alat seperti OWASP ESAPI dan pembersih HTML.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa