浅谈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 curl常见错误:SSL错误、bool(false)
Dec 28 PHP
PHP判断图片格式的七种方法小结
Jun 03 PHP
php漏洞之跨网站请求伪造与防止伪造方法
Aug 15 PHP
php检测iis环境是否支持htaccess的方法
Feb 18 PHP
php中数字0和空值的区别分析
Jun 05 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
Dec 18 PHP
浅谈php提交form表单
Jul 01 PHP
Discuz!X中SESSION机制实例详解
Sep 23 PHP
简单谈谈php延迟静态绑定
Jan 26 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
Thinkphp5框架使用validate实现验证功能的方法
Aug 27 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 array_filter除去数组中的空字符元素
2020/06/21 PHP
php 深入理解strtotime函数的使用详解
2013/05/23 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
javascript实现的在当前窗口中漂浮框的代码
2010/03/15 Javascript
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
PHP开发者必须掌握的6个关键字
2014/04/14 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
jQuery选择器源码解读(二):select方法
2015/03/31 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
2016/11/29 Javascript
JavaScript 判断iPhone X Series机型的方法
2019/01/28 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
python编写暴力破解FTP密码小工具
2014/11/19 Python
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
Python中模块与包有相同名字的处理方法
2017/05/05 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
Python读取本地文件并解析网页元素的方法
2018/05/21 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
CSS3绘制圆角矩形的简单示例
2015/09/28 HTML / CSS
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
HTML5 Video/Audio播放本地文件示例介绍
2013/11/18 HTML / CSS
HTML5的新特性(1)
2016/03/03 HTML / CSS
英国电器零售商:PRC Direct
2018/06/21 全球购物
个人自我鉴定写法
2013/11/30 职场文书
环保建议书400字
2014/05/14 职场文书
运动会的口号
2014/06/09 职场文书
党校学习党性分析材料
2014/12/19 职场文书
狮子林导游词
2015/02/03 职场文书
全国爱眼日活动总结
2015/02/27 职场文书
公司庆典主持词
2015/07/04 职场文书
MySql学习笔记之事务隔离级别详解
2021/05/12 MySQL