提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志、error 日志以及 PHP 的 error 日志。虽然看起来是个很简单的问题,但里面其实又牵扯到应用配置以及日志记录位置的问题,如果是在 ubuntu 等系统下使用 apt-get 的方式来安装,其自有一套较为合理的的配置文件可用。再者运行的应用程序中的配置也会影响到日志记录的方式及内容。

错误与异常的区别

关于错误与异常,我们可以用一个简单的例子来理解:

执行这个小示例会直接得到一个『PHP Warning: Division by zero …』错误。原因很简单:这是逻辑错误,并不是异常,所以不能被 `try` 捕获。同样,对于变量使用前未定义这种问题,也是同样的会产生 warning 而不是被捕获。

但是这个问题在 PHP7 中却有了一些改动,比如上面的例子中我把 `/` 改成 `%`,在 PHP7 的环境中执行会得到一个不一样的提示:

> PHP Fatal error: Uncaught DivisionByZeroError ...

根据这个提示,如果我把 catch 中的条件修改一下:

``

这样就可以正常捕获到错误并输出 `catched` 了。

对于第一个示例,同样如果把 `Excepiton` 修改为 `ErrorException` 也可以正常捕获。

至于为什么求余和除法,在 PHP5 中提示一致而在 PHP7(我的测试环境是 7.0.4) 中除法不属于 `DivisionByZeroError` 的问题,这应该是个 [BUG](https://bugs.php.net/bug.php?id=69957)。

日志的记录

-----

PHP 本身可配置的 log 大概有以下几个:

* php-fpm error log(php-fpm.conf 中配置,记录 php-fpm 进程的启动和终止等信息)

* php-fpm slow log(也是在 php-fpm.conf 中配置,记录慢执行)

* php error log(php.ini 中配置,记录应用程序的错误日志)

此外 Nginx 还有两个可配置的log:access 和 error log。这几个日志文件的功能不同,记录的内容也不同。但其中有一个点需要注意:如果配置了 php-fpm 中的 error log 位置,但日志位置不可写(配置时位置得是对的,因为 php-fpm 启动时会做检查),在适当的配置条件下错误日志会被返回到 cgi 中从而写入 nginx 的 error log 中。

所以遇到问题是我们一般的查找思路都是:

1. 到 Nginx access log 中查看请求的状态码

2. 查看 php error log 中的错误记录以及 stack 信息

3. 查看 php-fpm log 中有无异常重启记录(如果核心或者扩展问题,会出现此情况)

但是在以上几种情况下你也会发现,这里面并没有上文提到的程序抛出异常的日志记录。

异常记录

----

异常不同于错误,严格上说它是应用程序逻辑的异常而不是错误,是可以通过合理的程序逻辑来手动触发的。但大多情况下异常也是要进行记录的,比如数据库无法连接或者框架的不当使用触发的异常,我们需要通过日志来定位问题并及时处理。

PHP 提供了两个函数用于自定义处理错误和异常的方法:

* set_error_handler

* set_exception_handler

所以可以通过 `set_exception_handler` 函数注入方法捕获所有的异常并记录 。

[monolog](https://github.com/Seldaek/monolog) 是一个优秀的异常记录的库,也是基于 [PSR-3](http://www.php-fig.org/psr/psr-3/) 标准的实现。Laravel、Symfony 中默认也是使用它来记录异常。如有需要,也可以考虑在自己的项目中引入。

`` ```

复制代码

nginx php 错误日志,PHP 错误与异常的日志记录相关推荐

  1. exception日志 php_PHP中错误与异常的日志记录用法分析

    本文分析了PHP中错误与异常的日志记录用法.分享给大家供大家参考,具体如下: 提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志.error 日志以及 ...

  2. NGINX访问日志和错误日志

    Logs are very useful to monitor activities of any application apart from providing you with valuable ...

  3. .NET WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作)

    .NET WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作) 参考文章: (1).NET WebAPI 用ExceptionFilt ...

  4. nginx php返回500错误,nginx环境thinkphp,500错误

    今天吧网站放到nginx下centos环境,程序是thinkphp3.2的,首页能正常显示,内链所有都是500错误,贴出配置代码和错误日志,求解决方案!! server { listen 80; se ...

  5. 华为服务器提示错误信息,服务器错误日志

    服务器错误日志 内容精选 换一换 为加强对数据的容灾管理,云堡垒机支持手动备份和配置日志远程备份,提高审计数据安全性和系统可扩展性.通过手动导出/下载各功能模块数据文件保存在本地,可手动备份日志请参见 ...

  6. php错误拦截机制,php拦截异常怎么写-PHP问题

    php拦截异常可以通过PHP的错误.异常机制及其内建数'set_exception_handler'.'set_error_handler'.'register_shutdown_function' ...

  7. 日志php-error错误日志查看

    转载: https://blog.csdn.net/ty_hf/article/details/55505262 前言: 对于我们做php开发的人员,上了生产环境,一定要把相关debug,displa ...

  8. 前端错误监控与错误日志

    平时工作中没怎么接触到这部分,对它的了解也零零碎碎的.今天看了几篇文章,算是有个完整的认识了,在这里总结记录一下. 项目上线之后肯定无法避免所有的bug,有些bug出现后开发人员并不知道,有的知道了缺 ...

  9. 华为如何在开发者选项观察错误日志_爬虫scrapy框架--log日志输出配置及使用

    1.在配置文件中设置日志输出文件名和日志等级 1.为什么以日期为文件名? 因为这样可以方便开发者查看每天的日志信息,同时也可以防止单文件log日志信息堆积的越来越多,所以将当天日志信息保存到当天的日志 ...

  10. springboot 控制台输出错误信息_Spring boot使用logback实现日志配置

    前言 日志是我们系统必备的功能之一,可以帮助我们开发人员定位系统的异常.错误以及运行流程的重要的工具.今天老顾就来介绍一下Spring boot的默认的logback日志框架. 常用日志组件 java ...

最新文章

  1. 自然语言处理(NLP)之使用TF-IDF模型计算文本相似度
  2. HTML数字比较大小游戏,Javascript 比较两个数大小并输出最大数
  3. 聊聊我对黑客技术的思考
  4. java uuid静态方法_Java UUID equals()方法与示例
  5. Qt学习之路1---软件下载安装及工程简介
  6. 简述网卡的作用和工作原理_发电机调节器的作用及工作原理
  7. JS 数组(遍历 二维数组)
  8. 不为人知的AI简史:人机共生梦想家,却意外促成互联网的出现
  9. 怎么在线制作gif动图?推荐一款gif表情包在线制作生成器
  10. linux系统中的软件管理(软件仓库的搭建:本地+网络源+第三方)
  11. 基于51单片机的热敏电阻测温设计
  12. 如何让电脑快速蓝屏(只是个玩笑)
  13. 密歇根州立大学被黑 个人信息和社保号码被盗
  14. 黑苹果睡眠问题(仅适用自己的配置)
  15. 风压和功率计算公式轴流式_离心风机风压计算
  16. 基于FPGA的DDS混频及原理
  17. 用计算机算加法与乘法应该怎么算,你知道计算机是怎么计算加减乘除算式的么?...
  18. 微信吸粉实战二:腾讯新闻
  19. Codeforces 558C Amr and Chemistry 暴力 - -
  20. 知识图谱-生物信息学-医学顶刊论文(Briefings in Bioinformatics-2021):MPG:一种有效的自我监督框架,用于学习药物分子的全局表示以进行药物发现

热门文章

  1. 程序猿的日常——Java基础之equals与hashCode
  2. 也说_T、_TEXT、TEXT、L
  3. 继承与 Data Member(2)
  4. c#只用一个for输出三角形
  5. 基于SSH实现在线课程学习系统
  6. C# 访问并打开局域网文件夹
  7. Eclipse中导入项目后js报错解决方法
  8. C++入门经典-例4.7-变量的作用域
  9. POJ 2104 K-th Number
  10. Swift主题色顶级解决方案