浅谈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 getsiteurl()函数
Sep 05 PHP
php 魔术方法使用说明
Oct 20 PHP
PHP删除数组中空值的方法介绍
Apr 14 PHP
ThinkPHP之M方法实例详解
Jun 20 PHP
PHP实现通用alert函数的方法
Mar 11 PHP
php实现的RSS生成类实例
Apr 23 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
Dec 25 PHP
php实现在站点里面添加邮件发送的功能
Apr 28 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
Jan 20 PHP
phpStudy配置多站点多域名和多端口的方法
Sep 01 PHP
PHP时间类完整代码实例
Feb 26 PHP
Laravel中Kafka的使用详解
Mar 24 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阳历转农历优化版
2016/08/08 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
用JSON做数据传输格式中的一些问题总结
2011/12/21 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
Javascript中的call()方法介绍
2015/03/15 Javascript
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
2017/02/15 Javascript
Vue.js展示AJAX数据简单示例讲解
2017/03/29 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
深入了解Hybrid App技术的相关知识
2019/07/17 Javascript
laypage.js分页插件使用方法详解
2019/07/27 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
Python读写txt文本文件的操作方法全解析
2016/06/26 Python
快速入门python学习笔记
2017/12/06 Python
django2 快速安装指南分享
2018/01/05 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
Python实现打砖块小游戏代码实例
2019/05/18 Python
Python使用pdb调试代码的技巧
2020/05/03 Python
python脚本定时发送邮件
2020/12/22 Python
eDreams葡萄牙:全球最大的在线旅行社之一
2019/04/15 全球购物
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
生物技术专业研究生自荐信
2013/09/22 职场文书
经济管理专业自荐信
2013/12/30 职场文书
2014年保安个人工作总结
2014/11/13 职场文书
刘公岛导游词
2015/02/05 职场文书
异地恋情人节寄语
2015/02/28 职场文书
Nginx Rewrite使用场景及配置方法解析
2021/04/01 Servers