简单的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开启了全部后,以上的错误都会作为系统错误日志而记录在你定义的文件中。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

在Vue应用中使用axios是十分常见的,axios是一种基于Promise的HTTP客户端,可以用于浏览器和Node.js。在开发过程中,有时会出现“Uncaught(inpromise)Error:Requestfailedwithstatuscode500”的错误提示,对于开发者来说,这个错误提示可能有些难以理解和解决。本文将会探讨这

使用Java的File.length()函数获取文件的大小文件大小是在处理文件操作时很常见的一个需求,Java提供了一个很方便的方法来获取文件的大小,即使用File类的length()方法。本文将介绍如何使用该方法来获取文件的大小,并给出相应的代码示例。首先,我们需要创建一个File对象来表示我们想要获取大小的文件。以下是创建File对象的方法:Filef

想了解更多关于开源的内容,请访问:51CTO鸿蒙开发者社区https://ost.51cto.com运行环境DAYU200:4.0.10.16SDK:4.0.10.15IDE:4.0.600一、创建应用点击File->newFile->CreateProgect。选择模版:【OpenHarmony】EmptyAbility:填写项目名,shici,应用包名com.nut.shici,应用存储位置XXX(不要有中文,特殊字符,空格)。CompileSDK10,Model:Stage。Device

解决C++代码中出现的“error:expectedinitializerbefore'datatype'”问题在C++编程中,有时候我们在编写代码时会遇到一些编译错误,其中一种常见的错误是“error:expectedinitializerbefore'datatype'”。这个错误通常在变量声明或函数定义中发生,可能导致程序无法正确编译或

解决C++代码中出现的“error:incompletetypeisnotallowed”问题在C++的编程过程中,有时候会遇到一些编译错误,其中一个常见的错误是“error:incompletetypeisnotallowed”。这个错误通常是由于在使用不完整的类型进行操作时引起的。本文将介绍这个错误的原因,并提供几种解决方法。首先,我

如何解决PHPWarning:fopen():SSLoperationfailedinfile.phponlineX在PHP编程中,我们经常使用fopen函数来打开文件或者URL,并进行相关操作。然而,在使用fopen函数时,有时候会遇到类似于Warning:fopen():SSLoperationfailedinfile.p

PHPWarning:Invalidargumentsuppliedforforeach()-解决方案在使用PHP开发网页或应用程序时,经常会遇到各种错误和警告。其中一个常见的警告是“Invalidargumentsuppliedforforeach()”,它通常在使用foreach循环遍历数组时产生。这个问题看起来很简单,但是如果不

使用Java的File.renameTo()函数重命名文件在Java编程中,我们经常需要对文件进行重命名的操作。Java提供了File类来处理文件操作,其中的renameTo()函数可以方便地重命名文件。本文将介绍如何使用Java的File.renameTo()函数来重命名文件,并提供相应的代码示例。File.renameTo()函数是File类的一个方法,
