PHP code example of thunken / heimdal
1. Go to this page and download the library: Download thunken/heimdal library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
thunken / heimdal example snippets
'sentry' => [
'class' => \Thunken\Heimdal\Reporters\SentryReporter::class,
'config' => [
'dsn' => '',
// For extra options see https://docs.sentry.io/clients/php/config/
// php version and environment are automatically added.
'sentry_options' => []
]
]
namespace My\Namespace\Exceptions\Reporters;
use Thunken\Heimdal\Reporters\ReporterInterface;
class BugsnagReporter implements ReporterInterface
{
public function __construct(array $config)
{
// initialize with config
}
public function report(Exception $e)
{
// report to bugsnag
}
}
'bugsnag' => [
'class' => \My\Namespace\Exceptions\Reporters\BugsnagReporter::class,
'config' => [
// config.
]
]
'formatters' => [
SymfonyException\UnprocessableEntityHttpException::class => Formatters\UnprocessableEntityHttpExceptionFormatter::class,
SymfonyException\HttpException::class => Formatters\HttpExceptionFormatter::class,
Exception::class => Formatters\ExceptionFormatter::class,
],
namespace My\Namespace\Exceptions\Formatters;
use Exception;
use Illuminate\Http\JsonResponse;
use Thunken\Heimdal\Formatters\BaseFormatter;
class NotFoundHttpExceptionFormatter extends BaseFormatter
{
public function format(JsonResponse $response, Exception $e, array $reporterResponses)
{
$response->setStatusCode(404);
$data = $response->getData(true);
if ($this->debug) {
$data = array_merge($data, [
'code' => $e->getCode(),
'message' => $e->getMessage(),
'exception' => (string) $e,
'line' => $e->getLine(),
'file' => $e->getFile()
]);
} else {
$data['message'] = [
'message' => 'The resource was not found.',
'log_id' => $reporterResponses['sentry']['sentry_id']
]
}
$response->setData($data);
}
}
'formatters' => [
SymfonyException\UnprocessableEntityHttpException::class => Formatters\UnprocessableEntityHttpExceptionFormatter::class,
SymfonyException\NotFoundHttpException::class => My\Namespace\Exceptions\Formatters\NotFoundHttpExceptionFormatter::class,
SymfonyException\HttpException::class => Formatters\HttpExceptionFormatter::class,
Exception::class => Formatters\ExceptionFormatter::class,
],
php artisan vendor:publish --provider="Thunken\Heimdal\Provider\LaravelServiceProvider"
'reporters' => [
'sentry' => [
'class' => \Thunken\Heimdal\Reporters\SentryReporter::class,
'config' => [
'dsn' => '',
// For extra options see https://docs.sentry.io/clients/php/config/
// php version and environment are automatically added.
'sentry_options' => []
]
]
]
'reporters' => [
'sentry' => [
'class' => \Thunken\Heimdal\Reporters\SentryReporter::class,
'config' => [
'dsn' => env('SENTRY_DSN'),
// For extra options see https://docs.sentry.io/clients/php/config/
// php version and environment are automatically added.
'add_context' => function (Exception $e) {
$context = [
'environment' => app()->environment(),
'release' => \Infrastructure\Version::getGitTag()
];
$user = \Auth::User();
if ($user) {
$context['user'] = [
'id' => $user->id,
'email' => $user->email,
];
} else {
$context['user'] = [];
}
// When running in console request is not available
if (substr(php_sapi_name(), 0, 3) !== 'cli') {
$request = app('request');
if (!isset($context['extra'])) {
$context['extra'] = [];
}
$context['extra']['request_data'] = json_encode($request->all());
$context['user']['ip_address'] = \Request::getClientIp();
}
return $context;
}
]
]
]