Skip to content

codex-team/hawk.laravel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Hawk Laravel

Latest Version on Packagist License PHP Version

Laravel error catcher for Hawk.so.

Setup


  1. Register an account, create a project, and get an Integration Token.

  2. Install the SDK via Composer:

    composer require codex-team/hawk.laravel

Requirements

  • PHP 7.2+
  • Laravel 11.x+

Features


  • 🦅 Automatic error catching
  • 💎 Manual exception and message sending
  • 🙂 Attaching user information
  • 📦 Attaching additional context
  • 🛡️ Sensitive data filtering
  • 🌟 BeforeSend hook for event preprocessing
  • 🗂️ Breadcrumbs collection (routes, queries, jobs, logs)
  • ⚡ Laravel 11+ support

Configuration


Enable exception capturing

Update your bootstrap/app.php:

<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        //
    })
    ->withExceptions(function (Exceptions $exceptions) {
        HawkBundle\Integration::handles($exceptions);
    })
    ->create();

Register the Service Provider

Add the Hawk service provider to your config/app.php or bootstrap/providers.php:

'providers' => [
    // Other service providers...
    HawkBundle\ErrorLoggerServiceProvider::class,
],

Publish configuration

Run:

php artisan hawkbundle:publish

This will create config/hawk.php.
Then add your token in .env:

HAWK_TOKEN=<your_integration_token>

Usage


Adding User & Context Information

app(\HawkBundle\Catcher::class)->setUser([
    'name' => 'John Doe',
    'photo' => 'https://example.com/avatar.png',
]);

app(\HawkBundle\Catcher::class)->setContext([
    'page' => 'checkout',
    'cart_id' => 123,
]);

Sending Exceptions Manually

Inject \HawkBundle\Catcher and call sendException:

use HawkBundle\Catcher;

class TestController extends Controller
{
    private Catcher $catcher;

    public function __construct(Catcher $catcher)
    {
        $this->catcher = $catcher;
    }

    public function test()
    {
        try {
            // Code that may fail
        } catch (\Exception $e) {
            $this->catcher->sendException($e);
        }
    }
}

Sending Custom Messages

app(\HawkBundle\Catcher::class)->sendMessage(
    'Checkout started',
    [
        'cart_id' => 123,
        'step' => 'payment',
    ]
);

BeforeSend Hook


If you want to modify or filter errors before they are sent to Hawk,
implement the BeforeSendServiceInterface.

Example:

<?php

namespace App\Hawk;

use Hawk\EventPayload;
use HawkBundle\Services\BeforeSendServiceInterface;

class BeforeSendService implements BeforeSendServiceInterface
{
    public function __invoke(EventPayload $eventPayload): ?EventPayload
    {
        $user = $eventPayload->getUser();

        // Remove sensitive data
        if (!empty($user['email'])) {
            unset($user['email']);
            $eventPayload->setUser($user);
        }

        // Skip sending in specific cases
        if ($eventPayload->getContext()['skip_sending'] ?? false) {
            return null;
        }

        return $eventPayload;
    }
}

Register it in config/hawk.php:

return [
    'integration_token' => env('HAWK_TOKEN'),
    'before_send_service' => \App\Hawk\BeforeSendService::class,
];

Issues & Contributions


  • Found a bug? Open an issue
  • Want to improve the package? Pull requests are welcome!

Useful Links


License


MIT

About

Hawk Laravel SDK

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages