浅谈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将数据导入到Foxmail的实现代码
Sep 05 PHP
php二维数组排序详解
Nov 06 PHP
php实现获取文章内容第一张图片的方法
Nov 04 PHP
浅析php单例模式
Nov 25 PHP
PHP中SimpleXML函数用法分析
Nov 26 PHP
php.ini中的request_order推荐设置
May 10 PHP
CI(Codeigniter)的Setting增强配置类实例
Jan 06 PHP
Thinkphp连表查询及数据导出方法示例
Oct 15 PHP
PHP不使用内置函数实现字符串转整型的方法示例
Jul 03 PHP
PHP中命名空间的使用例子
Mar 22 PHP
Thinkphp 框架扩展之驱动扩展实例分析
Apr 27 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 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/10/09 PHP
帖几个PHP的无限分类实现想法~
2007/01/02 PHP
PHP函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
javascript 最常用的10个自定义函数[推荐]
2009/12/26 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
jQuery实现简单的日期输入格式化控件
2015/03/12 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
基于jQuery实现网页打印功能
2015/12/01 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
2018/09/16 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
前端如何实现动画过渡效果
2021/02/05 Javascript
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
王纯业的Python学习笔记 下载
2007/02/10 Python
python根据unicode判断语言类型实例代码
2018/01/17 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
2018/02/01 Python
查看python下OpenCV版本的方法
2018/08/03 Python
Python闭包思想与用法浅析
2018/12/27 Python
pandas的qcut()方法详解
2019/07/06 Python
pytorch数据预处理错误的解决
2020/02/20 Python
shell程序如何生命变量?shell变量是弱变量吗?
2014/11/10 面试题
自主招生自荐信格式
2013/12/03 职场文书
学术诚信承诺书
2014/05/26 职场文书
煤矿安全生产标语
2014/06/06 职场文书
幼儿园班级工作总结2015
2015/05/25 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python