浅谈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 相关文章推荐
IIS7.X配置PHP运行环境小结
Jun 09 PHP
thinkphp实现多语言功能(语言包)
Mar 04 PHP
ThinkPHP3.1查询语言详解
Jun 19 PHP
php数组排序usort、uksort与sort函数用法
Nov 17 PHP
php中文字符串截取多种方法汇总
Oct 06 PHP
PHP Mysqli 常用代码集合
Nov 12 PHP
PHPExcel在linux环境下导出报500错误的解决方法
Jan 26 PHP
Linux下快速搭建php开发环境
Mar 13 PHP
PHP多个图片压缩成ZIP的方法
Aug 18 PHP
php探针不显示内存解决方法
Sep 17 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
May 14 PHP
PHP控制循环操作的时间
Apr 01 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函数
2006/12/06 PHP
php define的第二个参数使用方法
2013/11/04 PHP
php生成RSS订阅的方法
2015/02/13 PHP
php自定义urlencode,urldecode函数实例
2015/03/24 PHP
php禁用函数设置及查看方法详解
2016/07/25 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
JS的replace方法介绍
2012/10/20 Javascript
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
2015/06/19 Javascript
Js+php实现异步拖拽上传文件
2015/06/23 Javascript
基于Javascript实现二级联动菜单效果
2016/03/04 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
VSCode搭建React Native环境
2020/05/07 Javascript
利用Python绘制数据的瀑布图的教程
2015/04/07 Python
解读Python中degrees()方法的使用
2015/05/18 Python
python学习必备知识汇总
2017/09/08 Python
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
scikit-learn线性回归,多元回归,多项式回归的实现
2019/08/29 Python
python实现计算器功能
2019/10/31 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
维也纳通行证:Vienna PASS
2019/07/18 全球购物
光荣入党自我鉴定
2014/01/22 职场文书
物流管理专业毕业生求职信
2014/03/23 职场文书
党的群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
Vue router配置与使用分析讲解
2022/12/24 Vue.js