将 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());