浅谈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 相关文章推荐
IIS下配置Php+Mysql+zend的图文教程
Dec 08 PHP
php+mysql开源XNA 聚合程序发布 下载
Jul 13 PHP
php 短链接算法收集与分析
Dec 30 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
php获取qq用户昵称和在线状态(实例分析)
Oct 27 PHP
php中json_encode UTF-8中文乱码的更好解决方法
Sep 28 PHP
PHP文件读写操作相关函数总结
Nov 18 PHP
基于php实现随机合并数组并排序(原排序)
Nov 26 PHP
php导出生成word的方法
Dec 25 PHP
什么是OneThink oneThink后台添加插件步骤
Apr 13 PHP
php基于闭包实现函数的自调用(递归)实例分析
Nov 11 PHP
详解阿里云视频直播PHP-SDK接入教程
Jul 09 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
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
2009/05/28 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
php-app开发接口加密详解
2018/04/18 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
JS Array对象入门分析
2008/10/30 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
探究python中open函数的使用
2016/03/01 Python
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
Python实现对文件进行单词划分并去重排序操作示例
2018/07/10 Python
Python-接口开发入门解析
2019/08/01 Python
python提取xml里面的链接源码详解
2019/10/15 Python
Python:slice与indices的用法
2019/11/25 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
亚马逊印度站:Amazon.in
2017/10/15 全球购物
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
英智兴达软件测试笔试题
2016/10/12 面试题
学生个人求职自荐信格式
2013/09/23 职场文书
银行员工辞职信范文
2014/01/20 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
学校光盘行动倡议书
2015/04/28 职场文书
三八节活动主持词
2015/07/04 职场文书
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers