浅谈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常用代码
Nov 23 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续四
Apr 03 PHP
php intval的测试代码发现问题
Jul 27 PHP
php 传值赋值与引用赋值的区别
Dec 29 PHP
centos 5.6 升级php到5.3的方法
May 14 PHP
ThinkPHP写第一个模块应用
Feb 20 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
Jun 18 PHP
PHP遍历并打印指定目录下所有文件实例
Feb 10 PHP
php判断是否为json格式的方法
Mar 04 PHP
PHP合并数组的2种方法小结
Nov 24 PHP
php生成图片缩略图功能示例
Feb 22 PHP
php微信开发之关键词回复功能
Jun 13 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数据库万能引擎类adodb配置使用以及实例集锦
2014/06/12 PHP
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
node.js中Socket.IO的进阶使用技巧
2014/11/04 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
javascript作用域、作用域链(菜鸟必看)
2016/06/16 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
2016/11/16 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
vue代码分割的实现(codesplit)
2018/11/13 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
layui时间控件选择时间范围的实现方法
2019/09/28 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
JS实现商品橱窗特效
2020/01/09 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
python更改已存在excel文件的方法
2018/05/03 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
input file上传文件样式支持html5的浏览器解决方案
2012/11/14 HTML / CSS
英语简历自我评价
2014/01/26 职场文书
2014年社区工作总结
2014/11/18 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
Python连续赋值需要注意的一些问题
2021/06/03 Python
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS