Heim > php教程 > php手册 > Hauptteil

简单的php自定义错误日志

WBOY
Freigeben: 2016-06-06 19:44:49
Original
958 Leute haben es durchsucht

平时经常看php的错误日志,很少有机会去自己动手写日志,看了王健的《最佳日志实践》觉得写一个清晰明了,结构分明的日志还是非常有必要的。 在写日志前,我们问问自己 :为什么我们有时要记录自定义的日志呢?而不用系统默认的日志记录方式呢? 我认为有两

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

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

我认为有两个原因:

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

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

那么,实践一下。


1.打开你的php.ini

2.打开日志记录,将

log_errors = Off
Nach dem Login kopieren

改成

log_errors = On
Nach dem Login kopieren

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

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

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

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

<span>echo</span> 1/0;
Nach dem Login kopieren

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

以下级别的错误不能由用户定义的函数来处理: 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开启了全部后,以上的错误都会作为系统错误日志而记录在你定义的文件中。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!