将 500 错误写入系统日志并在 slim 框架中设置自定义错误消息
write 500 error into syslog and set custom error message in slim framework
我正在设置 slim 并想将 500 错误写入系统日志并为用户设置自定义消息。我制作了将错误写入系统日志的自定义日志编写器。这是实现:
include_once '../vendor/autoload.php';
use Slim\Slim;
$config = array(
'debug' => false,
'mode' => 'development',
'log.writer' => new \api\libraries\LogWriter(),
'log.enabled' => true,
'log.level' => \Slim\Log::DEBUG
);
$app = new Slim($config);
/**
* test
*/
$app->get('/test/:name', function ($name) {
echo "Hello, $name2";
});
$app->run();
这将触发错误并将错误写入系统日志,因为变量 $name2 未定义。系统日志示例:
agan@darkstar ~ $ sudo tail /var/log/syslog
Sep 9 11:37:46 localhost apache2: [API] ERROR - 2015-09-09T11:37:46+07:00 - exception 'ErrorException' with message 'Undefined variable: name2' in ...
然后,我想为用户设置自定义消息。所以我在 $app->run()
之前添加这段代码
/**
* 500 internal service error handler
*/
$app->error(function(\Exception $e) use ($app) {
$app->response->setBody('Sorry, we are offline');
});
但是,如果我在上面添加代码,则不会执行日志编写器,在系统日志中找不到日志,但自定义消息可以正常工作。
正确的做法是什么?
您必须手动写入日志:
$app->log->error($e->getMessage());
我正在设置 slim 并想将 500 错误写入系统日志并为用户设置自定义消息。我制作了将错误写入系统日志的自定义日志编写器。这是实现:
include_once '../vendor/autoload.php';
use Slim\Slim;
$config = array(
'debug' => false,
'mode' => 'development',
'log.writer' => new \api\libraries\LogWriter(),
'log.enabled' => true,
'log.level' => \Slim\Log::DEBUG
);
$app = new Slim($config);
/**
* test
*/
$app->get('/test/:name', function ($name) {
echo "Hello, $name2";
});
$app->run();
这将触发错误并将错误写入系统日志,因为变量 $name2 未定义。系统日志示例:
agan@darkstar ~ $ sudo tail /var/log/syslog
Sep 9 11:37:46 localhost apache2: [API] ERROR - 2015-09-09T11:37:46+07:00 - exception 'ErrorException' with message 'Undefined variable: name2' in ...
然后,我想为用户设置自定义消息。所以我在 $app->run()
/**
* 500 internal service error handler
*/
$app->error(function(\Exception $e) use ($app) {
$app->response->setBody('Sorry, we are offline');
});
但是,如果我在上面添加代码,则不会执行日志编写器,在系统日志中找不到日志,但自定义消息可以正常工作。
正确的做法是什么?
您必须手动写入日志:
$app->log->error($e->getMessage());