Implemented logger in http server
This commit is contained in:
parent
5fcc5b9b38
commit
f03ab69bf3
76
app/http.php
76
app/http.php
|
@ -10,6 +10,8 @@ use Swoole\Http\Request as SwooleRequest;
|
||||||
use Swoole\Http\Response as SwooleResponse;
|
use Swoole\Http\Response as SwooleResponse;
|
||||||
use Utopia\App;
|
use Utopia\App;
|
||||||
use Utopia\CLI\Console;
|
use Utopia\CLI\Console;
|
||||||
|
use Utopia\Logger\Log;
|
||||||
|
use Utopia\Logger\Log\User;
|
||||||
use Utopia\Swoole\Files;
|
use Utopia\Swoole\Files;
|
||||||
use Utopia\Swoole\Request;
|
use Utopia\Swoole\Request;
|
||||||
|
|
||||||
|
@ -94,6 +96,60 @@ $http->on('request', function (SwooleRequest $swooleRequest, SwooleResponse $swo
|
||||||
|
|
||||||
$app->run($request, $response);
|
$app->run($request, $response);
|
||||||
} catch (\Throwable $th) {
|
} catch (\Throwable $th) {
|
||||||
|
$version = App::getEnv('_APP_VERSION', 'UNKNOWN');
|
||||||
|
|
||||||
|
$user = null;
|
||||||
|
try {
|
||||||
|
$user = $app->getResource('user');
|
||||||
|
} catch(\Throwable $th) {
|
||||||
|
// All good, user is optional information for logger
|
||||||
|
}
|
||||||
|
|
||||||
|
$logger = $app->getResource("logger");
|
||||||
|
if($logger) {
|
||||||
|
$loggerBreadcrumbs = $app->getResource("loggerBreadcrumbs");
|
||||||
|
$project = $app->getResource("project");
|
||||||
|
$route = $app->match($request);
|
||||||
|
|
||||||
|
$log = new Utopia\Logger\Log();
|
||||||
|
|
||||||
|
if(!$user->isEmpty()) {
|
||||||
|
$log->setUser(new User($user->getId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
$log->setNamespace("http");
|
||||||
|
$log->setServer(\gethostname());
|
||||||
|
$log->setVersion($version);
|
||||||
|
$log->setType(Log::TYPE_ERROR);
|
||||||
|
$log->setMessage($th->getMessage());
|
||||||
|
|
||||||
|
$log->addTag('method', $route->getMethod());
|
||||||
|
$log->addTag('url', $route->getPath());
|
||||||
|
$log->addTag('verboseType', get_class($th));
|
||||||
|
$log->addTag('code', $th->getCode());
|
||||||
|
$log->addTag('projectId', $project->getId());
|
||||||
|
$log->addTag('hostname', $request->getHostname());
|
||||||
|
$log->addTag('locale', (string)$request->getParam('locale', $request->getHeader('x-appwrite-locale', '')));
|
||||||
|
|
||||||
|
$log->addExtra('file', $th->getFile());
|
||||||
|
$log->addExtra('line', $th->getLine());
|
||||||
|
$log->addExtra('trace', $th->getTraceAsString());
|
||||||
|
$log->addExtra('roles', Authorization::$roles);
|
||||||
|
|
||||||
|
$action = $route->getLabel("sdk.namespace", "UNKNOWN_NAMESPACE") . '.' . $route->getLabel("sdk.method", "UNKNOWN_METHOD");
|
||||||
|
$log->setAction($action);
|
||||||
|
|
||||||
|
$isProduction = App::getEnv('_APP_ENV', 'development') === 'production';
|
||||||
|
$log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING);
|
||||||
|
|
||||||
|
foreach($loggerBreadcrumbs as $loggerBreadcrumb) {
|
||||||
|
$log->addBreadcrumb($loggerBreadcrumb);
|
||||||
|
}
|
||||||
|
|
||||||
|
$responseCode = $logger->addLog($log);
|
||||||
|
Console::info('Log pushed with status code: '.$responseCode);
|
||||||
|
}
|
||||||
|
|
||||||
Console::error('[Error] Type: '.get_class($th));
|
Console::error('[Error] Type: '.get_class($th));
|
||||||
Console::error('[Error] Message: '.$th->getMessage());
|
Console::error('[Error] Message: '.$th->getMessage());
|
||||||
Console::error('[Error] File: '.$th->getFile());
|
Console::error('[Error] File: '.$th->getFile());
|
||||||
|
@ -108,12 +164,20 @@ $http->on('request', function (SwooleRequest $swooleRequest, SwooleResponse $swo
|
||||||
|
|
||||||
$swooleResponse->setStatusCode(500);
|
$swooleResponse->setStatusCode(500);
|
||||||
|
|
||||||
if(App::isDevelopment()) {
|
$output = ((App::isDevelopment())) ? [
|
||||||
$swooleResponse->end('error: '.$th->getMessage());
|
'message' => 'Error: '. $th->getMessage(),
|
||||||
}
|
'code' => 500,
|
||||||
else {
|
'file' => $th->getFile(),
|
||||||
$swooleResponse->end('500: Server Error');
|
'line' => $th->getLine(),
|
||||||
}
|
'trace' => $th->getTrace(),
|
||||||
|
'version' => $version,
|
||||||
|
] : [
|
||||||
|
'message' => 'Error: Server Error',
|
||||||
|
'code' => 500,
|
||||||
|
'version' => $version,
|
||||||
|
];
|
||||||
|
|
||||||
|
$swooleResponse->end(\json_encode($output));
|
||||||
} finally {
|
} finally {
|
||||||
/** @var PDOPool $dbPool */
|
/** @var PDOPool $dbPool */
|
||||||
$dbPool = $register->get('dbPool');
|
$dbPool = $register->get('dbPool');
|
||||||
|
|
Loading…
Reference in a new issue