浅谈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 相关文章推荐
php的控制语句
Oct 09 PHP
php下将XML转换为数组
Jan 01 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
May 04 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
PHP判断上传文件类型的解决办法
Oct 20 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
Sep 02 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
Aug 14 PHP
PHP实现数组根据某个单元字段排序操作示例
Aug 01 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
Oct 14 PHP
PHP 加密 Password Hashing API基础知识点
Mar 02 PHP
PHP sdk实现在线打包代码示例
Dec 09 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
PHP连接SQLServer2005方法及代码
2013/12/26 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
javascript的console.log()用法小结
2012/05/31 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
2013/04/21 Javascript
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
原生的强大DOM选择器querySelector介绍
2016/12/21 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
es6中reduce的基本使用方法
2019/09/10 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
Vue $attrs &amp; inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
Python常用知识点汇总
2016/05/08 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
2017/03/16 Python
python利用MethodType绑定方法到类示例代码
2017/08/27 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
Python中Numpy ndarray的使用详解
2019/05/24 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
2019/09/02 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
Python实现EM算法实例代码
2020/10/04 Python
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
Ajax的工作原理
2015/12/04 面试题
外贸销售员求职的自我评价
2013/11/23 职场文书
书法培训心得体会
2014/01/05 职场文书
反腐倡廉演讲稿
2014/05/22 职场文书
pytorch常用数据类型所占字节数对照表一览
2021/05/17 Python
Js类的构建与继承案例详解
2021/09/15 Javascript
聊聊Python String型列表求最值的问题
2022/01/18 Python