浅谈php自定义错误日志


Posted in PHP onFebruary 13, 2015

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

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

我认为有两个原因:

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

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

 那么,实践一下。

1.打开你的php.ini

 2.打开日志记录,将

log_errors = Off

改成

log_errors = On

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

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

<?php

//错误处理函数

function myErrorHandler($errno, $errstr, $errfile, $errline)

{

    $log_file = "./php_%s_log_".date("Ymd").".log";//定义日志文件存放目录和文件名

    $template = '';

    switch ($errno) {

    case E_USER_ERROR:

        $template .= "用户ERROR级错误,必须修复 错误编号[$errno] $errstr ";

        $template .= "错误位置 文件$errfile,第 $errline 行\n";

        $log_file = sprintf($log_file,'error');

        exit(1);//系统退出

        break;

    case E_USER_WARNING:

        $template .= "用户WARNING级错误,建议修复 错误编号[$errno] $errstr ";

        $template .= "错误位置 文件$errfile,第 $errline 行\n";

        $log_file = sprintf($log_file,'warning');

        break;

    case E_USER_NOTICE:

        $template .= "用户NOTICE级错误,不影响系统,可不修复 错误编号[$errno] $errstr ";

        $template .= "错误位置 文件$errfile,第 $errline 行\n";

    $log_file = sprintf($log_file,'notice');

        break;

    default:

        $template .= "未知错误类型: 错误编号[$errno] $errstr  ";

        $template .= "错误位置 文件$errfile,第 $errline 行\n";

        $log_file = sprintf($log_file,'unknown');

        break;

    }

    file_put_contents($log_file,$template,FILE_APPEND);

    return true;

}

$error_handler = set_error_handler("myErrorHandler");//开启自定义错误日志

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

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

以上就是本文所述的全部内容了,希望大家能对php自定义错误日志有新的认识。

PHP 相关文章推荐
初探PHP5
Oct 09 PHP
怎样去阅读一份php源代码
Aug 21 PHP
is_uploaded_file函数引发的不能上传文件问题
Oct 29 PHP
让PHP显示Facebook的粉丝数量方法
Jan 08 PHP
php去除换行(回车换行)的三种方法
Mar 26 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
Jan 19 PHP
PHP共享内存用法实例分析
Feb 12 PHP
完美解决thinkphp唯一索引重复时出错的问题
Mar 31 PHP
php插件Xajax使用方法详解
Aug 31 PHP
php中通用的excel导出方法实例
Dec 30 PHP
PHP实现统计代码行数小工具
Sep 19 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
Feb 12 #PHP
php制作动态随机验证码
Feb 12 #PHP
PHP获取一年中每个星期的开始和结束日期的方法
Feb 12 #PHP
php模拟post提交数据的方法
Feb 12 #PHP
PHP遍历数组的三种方法及效率对比分析
Feb 12 #PHP
PHP进程同步代码实例
Feb 12 #PHP
PHP CURL 内存泄露问题解决方法
Feb 12 #PHP
You might like
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
PHP asXML()函数讲解
2019/02/03 PHP
用 javascript 实现的点击复制代码
2007/03/24 Javascript
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
JS+CSS实现闪烁字体效果代码
2016/04/05 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
JQuery validate 验证一个单独的表单元素实例
2017/02/17 Javascript
JavaScript中最常见的三个面试题解析
2017/03/04 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
2017/03/21 jQuery
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
Python中的包和模块实例
2014/11/22 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
保安自我鉴定范文
2013/12/08 职场文书
点菜员岗位职责范本
2014/02/14 职场文书
平面设计求职信
2014/03/10 职场文书
企业党员一句话承诺
2014/05/30 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
迎国庆演讲稿
2014/09/05 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
《水上飞机》教学反思
2016/02/20 职场文书
快速学习Oracle触发器和游标
2021/06/30 Oracle
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL