一、场景介绍:

环境:LNMP

我们通常是通过nginx的错误日志来分析分错的,也就是我们在各个server中定义的error_log。

比如下面这样,就是将错误日志定义在/etc/nginx/logs/error/www.xiaobudiu.top.log,发生错误,可以查看的对应错误日志文件即可。

server {
    listen       80 default_server;
    server_name  www.xiaobudiu.top;

    charset utf-8;
    error_log    /etc/nginx/logs/error/www.xiaobudiu.top.log error;
    access_log  /etc/nginx/logs/access/www.xiaobudiu.top.log main;

    root   /data/www;
    index  index.html index.htm index.php;

    location /favicon.ico {
        log_not_found off;
        access_log off;
    }error_page  404 403 500 502 503 504  /404.html;

   location = /404.html {
        root   /data/errorPage;
   }location ~ \.php$ {
        fastcgi_pass   unix:/dev/shm/php-cgi.sock;
        fastcgi_index  index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
   }location ~ /\.ht {
        deny  all;
    }}

但是,这只是将一个网站的所有错误日志都放在了一起,十分不利于分析。

比如,用户订单操作错误时,我们最好把有关订单的错误写到一个日志。再比如登录操作错误的,我们最好也是把出错误日志写在登录错误日志中,如何实现呢。

这里,我们只需要在程序中自定义一个错误日志函数即可,然后,在程序中进行相应的判断,如果程序没执行成功,则调用记录错误日志函数,比如下面这样。

二、自定义错误日志格式,并进行记录日志

1、程序中编写相应程序
<?php
function set_debug($uid = '', $order = '', $data = ''){$error_path = 'order.error.html';//自定义错误日志保存的文件和路径
    $error_data = array('time' => date("Y-m-d H:i",time()),//记录错误发生的时间
        'error' => urlencode($data),//防止中文乱码
        'order'=> $order,//记录订单
        'user_name'=> $uid,//记录当前用户
    );
    //判断文件大小,选择追加还是重新写入,注意之前防止乱码用了urlencode
    if( abs(filesize($error_path)) < 10240 ){@file_put_contents($error_path, urldecode(json_encode($error_data))."<br>",FILE_APPEND);
    }else{@file_put_contents($error_path, urldecode(json_encode($error_data)) ."<br>");
    };
}//模拟订单录入错误时,将日志记录到错误日志中
$uid = 1000070;//模拟用户uid
$order = 2132215641000070;//模拟用户订单号
if (true)  {set_debug($uid,$order,'订单录入失败');
}
2、创建错误文件,并赋予权限

cd /data/www

touch order.error.html

chmod 777 order.error.html

3、效果

注:鉴于安全考虑,错误日志外人肯定是不能访问到的,所以可以在server中定义正则匹配location,要求指定ip地址段才可以访问这个文件。可以使用nginx自带的 http_access_module 模块进行ip鉴权。当然,也可以采取其他办法。

这里,以http_access_module 模块ip鉴权为例。

server {
    listen       80 default_server;
    server_name  www.xiaobudiu.top;

    charset utf-8;
    error_log    /etc/nginx/logs/error/www.xiaobudiu.top.log error;
    access_log  /etc/nginx/logs/access/www.xiaobudiu.top.log main;

    root   /data/www;
    index  index.html index.htm index.php;

    location /favicon.ico {
        log_not_found off;
        access_log off;
    }error_page  404 403 500 502 503 504  /404.html;

   location = /404.html {
        root   /data/errorPage;
   }location ~ \.php$ {
        fastcgi_pass   unix:/dev/shm/php-cgi.sock;
        fastcgi_index  index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
   }location ~ ^/order.error.html$ {
       allow 183.128.227.94;  #这个ip能访问order.error.html
       deny all;              #其他的不可以访问这个页面
   }location ~ /\.ht {
        deny  all;
    }}

这样,就实现了除了我规定的ip地址外,其他ip地址是访问不到这个文件的。

注:也可以参考https://blog.csdn.net/m_nanle_xiaobudiu/article/details/80688740 最后面内容。

三、使用PHP自带的error_log 或者 trigger_error 函数

代码:

<?php
$uid = 1000060;
if (true) {//采取下面记录php错误日志的其中一种
    if (true) {error_log($uid."订单录入错误,请核实后重新录入");
    }if (true) {trigger_error($uid."订单录入错误,请核实后重新录入,heihei~");
    }
}

效果:

总结:其实在项目中,最好还是使用自定义的记录错误函数比较好,简单明了,而使用error_log 或者 trigger_error 则没有太大必要,当做一个辅助措施即可。

PHP项目中,记录错误日志相关推荐

  1. 在 Java 项目中打印错误日志的正确姿势,排查问题更方便,非常实用!

    在程序中打错误日志的主要目标是为更好地排查问题和解决问题提供重要线索和指导.但是在实际中打的错误日志内容和格式变化多样,错误提示上可能残缺不全.没有相关背景.不明其义,使得排查解决问题成为非常不方便或 ...

  2. 在Java项目中打印错误日志的正确姿势,排查问题更方便,非常实用!

    作者:琴水玉 cnblogs.com/lovesqcc/p/4319594.html 在程序中打错误日志的主要目标是为更好地排查问题和解决问题提供重要线索和指导.但是在实际中打的错误日志内容和格式变化 ...

  3. error 系统错误 错误码10007_在Java项目中打印错误日志的正确姿势,排查问题更方便,非常实用!...

    作者:琴水玉 cnblogs.com/lovesqcc/p/4319594.html 在程序中打错误日志的主要目标是为更好地排查问题和解决问题提供重要线索和指导. 但是在实际中打的错误日志内容和格式变 ...

  4. 使用Global.asax在ASP.NET中记录错误日志

    完整的Glabal.asax代码: <%@ Application Language="C#" %> <script RunAt="server&quo ...

  5. php输出mysql错误日志_PHP_PHP中把错误日志保存在系统日志中(Windows系统),【将错误记录到系统日志中】 - phpStudy...

    PHP中把错误日志保存在系统日志中(Windows系统) [将错误记录到系统日志中] 在 php.ini 中将 error_log 设置为: error_log = syslog 或者在运行时使用 i ...

  6. 在Go语言项目中使用Zap日志库

    在Go语言项目中使用Zap日志库 Go语言原生的日志库的使用,然后详细介绍了非常流行的Uber开源的zap日志库,同时介绍了如何搭配Lumberjack实现日志的切割和归档. 一.在Go语言项目中使用 ...

  7. php 系统日志,PHP中把错误日志保存在系统日志中(Windows系统)

    PHP中把错误日志保存在系统日志中(Windows系统) [将错误记录到系统日志中] 在 php.ini 中将 error_log 设置为: 复制代码 代码如下: error_log = syslog ...

  8. php 保存错误日志,PHP中把错误日志保存在系统日志中_PHP教程

    PHP中把错误日志保存在系统日志中 这篇文章主要介绍了PHP中把错误日志保存在系统日志中(Windows系统),本文讲解了设置方法和查看方法,需要的朋友可以参考下 [将错误记录到系统日志中] 在 ph ...

  9. 请不要在Java项目中乱打印日志了,这才是正确姿势,非常实用!

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...

最新文章

  1. 2021年3月15日 腾讯PCG运营开发实习面试(一、二、三面)(面经含总结)
  2. hdu_5701_中位数计数
  3. python dataframe删除某一列_怎样用Python进行数据分析
  4. DIV+CSS两种盒子模型(W3C盒子与IE盒子)
  5. 用PDB库调试Python程序
  6. erp系统是什么软件有哪些
  7. Linux 命令行 Tricks
  8. poj 1657 Distance on Chessboard
  9. born to be wild---Bangkok篇
  10. MongoDB实战系列之三:MongoDB的主从部署
  11. 使用USB驱动虚拟一个声卡
  12. 香港服务器哪家好?香港机房前十排名
  13. 2018.4.1(python) 请编写程序将用户输入华氏度转换为摄氏度,或将输入的摄氏度转换为华氏度。 //(米和英寸之间的长度转换)//热量转换
  14. Google搜索引擎使用技巧大全
  15. gpt mac linux window guid type,parted解决超大容量磁盘分区 GPT分区表
  16. SQL Server新增Contained Database功能
  17. Linux 管道操作符详解
  18. SPICE电路仿真(1)--ngspice
  19. 金秋“论道”分享——《IPTV直播+技术平台浅析》
  20. 什么是超级计算机技术,超级计算机有什么用,带你了解什么是超级计算

热门文章

  1. Js黑客帝国效果 文字下落 制作过程和思路
  2. 如何解决U盘无法停止通用卷设备
  3. c#中BackGroundWorker控件
  4. 巧用ActionFilter的AOP特性,为返回的数据增加返回码和消息
  5. Ant Design Blazor 组件库的路由复用多标签页介绍
  6. 如何在 ASP.NET Core 中使用 HttpClientFactory ?
  7. Dapr是如何简化微服务的开发和部署
  8. 我用 MySQL 干掉了一摞简历
  9. 说说 C# 9 新特性的实际运用
  10. .NET Core请求控制器Action方法正确匹配,但为何404?