浅谈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 相关文章推荐
snoopy PHP版的网络客户端提供本地下载
Apr 15 PHP
PHP字符串处理的10个简单方法
Jun 30 PHP
优化PHP代码技巧的小结
Jun 02 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
Jan 30 PHP
php时间戳转换的示例
Mar 31 PHP
php中session与cookie的比较
Jan 27 PHP
PHP根据图片色界在不同位置加水印的方法
Jul 01 PHP
Centos PHP 扩展Xchche的安装教程
Jul 09 PHP
PHP常用操作类之通信数据封装类的实现
Jul 16 PHP
PHP实现负载均衡session共享redis缓存操作示例
Aug 22 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
Oct 21 PHP
laravel框架语言包拓展实现方法分析
Nov 22 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网站自动化配置的实现方法(必看)
2017/05/27 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
js 如何实现对数据库的增删改查
2012/11/23 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
2013/08/16 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
2015/01/29 Javascript
教你如何终止JQUERY的$.AJAX请求
2016/02/23 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
VUE element-ui 写个复用Table组件的示例代码
2017/11/18 Javascript
浅谈vue,angular,react数据双向绑定原理分析
2017/11/28 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
js实现飞机大战小游戏
2020/08/26 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
Python 打印中文字符的三种方法
2018/08/14 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
Ajax实现页面无刷新留言效果
2021/03/24 Javascript
电气工程和自动化自荐信范文
2013/12/25 职场文书
幼儿园保育员辞职信
2014/01/12 职场文书
公司接待方案
2014/03/08 职场文书
建筑安全员岗位职责
2014/03/13 职场文书
绩效管理实施方案
2014/03/19 职场文书
趣味运动会广播稿
2014/09/13 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书
身份证丢失证明
2015/06/19 职场文书
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL