在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
使用log4php 记录系统日志: 1、自动拦截php报出的错误,写日志 2、手动打印错误 set_error_handler('captureNormal',E_ERROR | E_PARSE); set_exception_handler('captureException'); register_shutdown_function('captureShutdown');
自动拦截错误时,其中拦截captureShutDown中的处理不能写日志,进过调试发现log4php中有自己的错误处理函数,在错误处理函数中将写日志功能关闭了。 /** * Default constructor. * @param string $name Appender name */ public function __construct($name = '') { $this->name = $name; // Closes the appender on shutdown. Better than a destructor because // it will be called even if a fatal error occurs (destructor won't). register_shutdown_function(array($this, 'close')); if ($this->requiresLayout) { $this->layout = $this->getDefaultLayout(); } }
LoggerAppenderFile 继承与 LoggerAppendder 其中重写了close方法 public function close() { if($this->closed != true) { if($this->fp and $this->layout !== null) { if(flock($this->fp, LOCK_EX)) { fwrite($this->fp, $this->layout->getFooter()); flock($this->fp, LOCK_UN); } fclose($this->fp); } $this->closed = true; } }
调试中发现,调用close方法没有堆栈信息,猜想多半是使用了 register_shutdown_function
|
2022-08-17
2022-09-18
2022-08-17
2022-08-13
2022-08-15
请发表评论