Buggregator is a beautiful, lightweight web server built on Laravel and VueJs that helps debugging your app.

Last update: May 16, 2022

A server for debugging more than just Laravel applications.

Support me on Patreon Downloads Twitter Join to our telegram

Buggregator is a beautiful, lightweight web server built on Laravel and VueJs that helps debugging your app. It runs without installation on multiple platforms via docker and supports symfony var-dumper, monolog, sentry, smtp and spatie ray package.

Contents

  1. Features
  2. Installation
  3. Configuration
  4. Contributing
  5. License

Buggregator

Features

1. Symfony VarDumper server

The dump() and dd() functions output its contents in the same browser window or console terminal as your own application. Sometimes mixing the real output with the debug output can be confusing. That’s why this Buggregator can be used to collect all the dumped data. Buggregator can display dump output in the browser as well as in a terminal (console output).

Example

VAR_DUMPER_FORMAT=server
VAR_DUMPER_SERVER=127.0.0.1:9912

2. Fake SMTP server for catching mail

Buggregator also is an email testing tool that makes it super easy to install and configure a local email server (Like MailHog). Buggregator sets up a fake SMTP server and you can configure your preferred web applications to use Buggregator’s SMTP server to send and receive emails. For instance, you can configure a local WordPress site to use Buggregator for email deliveries.

Example

MAIL_MAILER=smtp
MAIL_HOST=127.0.0.1
MAIL_PORT=1025

3. Compatible with Sentry

Buggregator can be used to receive Sentry reports from your application. Buggregator is a lightweight alternative for local development. Just configure Sentry DSN to send data to Buggregator. It can display dump output in the browser as well as in a terminal (console output).

Simple example SENTRY_LARAVEL_DSN=http://[email protected]:23517/1.

4. Compatible with Monolog

Buggregator can receive logs from monolog/monolog package via \Monolog\Handler\SlackWebhookHandler or \Monolog\Handler\SocketHandler handler. Buggregator can display dump output in the browser as well as in a terminal (console output).

Example

LOG_CHANNEL=slack
LOG_SLACK_WEBHOOK_URL=http://127.0.0.1:23517/slack

5. Spatie Ray debug tool

Buggregator is compatible with spatie/ray package. The Ray debug tool supports PHP, Ruby, JavaScript, TypeScript, NodeJS, Go and Bash applications. After installing one of the libraries, you can use the ray function to quickly dump stuff. Any variable(s) that you pass will be sent to the Buggregator. Buggregator can display dump output in the browser as well as in a terminal (console output).

Supported features: Simple data, Colors, Sizes, Labels, New screen, Clear all, Caller, Trace, Pause, Counter, Class name of an object, Measure, Json, Xml, Carbon, File, Table, Image, Html, Text, Notifications, Phpinfo, Exception, Show queries, Count queries, Show events, Show jobs, Show cache, Model, Show views, Markdown, Collections, Env, Response, Request, Ban, Charles, Remove, Hide/Show events, Application log, Show Http client requests, Mailable

Read more about spatie/ray package.

Example

RAY_HOST=127.0.0.1  # Ray server host
RAY_PORT=23517      # Ray server port

It is a free alternative of The Ray app for those who want to run a server without GUI, cannot afford the paid version or just like open source.

But it doesn’t mean you shouldn’t support spatie’s packages!

UI

Buggregator has a responsive design and a mobile device can be used as an additional screen for viewing event history. Also you can user a termial to collect dump output if you don't want to use a browser.

Buggregator devices

Code samples

Code samples of configured Laravel application ready to send data to Buggregator you can find here.

Articles


Technological stack

Installation

Docker image

You can run Buggregator via docker from Docker Hub or using the provided Dockerfile

Just run on bash command

docker run --pull always -p 23517:8000 -p 1025:1025 -p 9912:9912 -p 9913:9913 butschster/buggregator:latest
# --pull always - optional option checks latest version on every running. You can omit it

# or specific version
docker run -p 23517:8000 -p 1025:1025 -p 9912:9912 -p 9913:9913 butschster/buggregator:v1.18

# You can omit unused ports if you use, for example, only var-dumper
docker run --pull always -p 9912:9912 butschster/buggregator:latest

You can omit unused ports

If you don't want to see dump output in your terminal, you can disable it through ENV variables:

CLI_SMTP_STREAM=false
CLI_VAR_DUMPER_STREAM=false
CLI_SENTRY_STREAM=false
CLI_RAY_STREAM=false
CLI_MONOLOG_STREAM=false

Example

docker run --pull always --env CLI_SMTP_STREAM=false --env CLI_SENTRY_STREAM=false -p 23517:8000 -p 1025:1025 -p 9912:9912 -p 9913:9913 butschster/buggregator:latest

Docker compose

// docker-compose.yml
version: "2"
services:
    debugger:
        image: butschster/buggregator:latest
        environment:
            DB_CONNECTION: pgsql
            DB_HOST: db
            DB_DATABASE: homestead
            DB_USERNAME: homestead
            DB_PASSWORD: secret
        ports:
        - 23517:8000
        - 1025:1025
        - 9912:9912
        - 9913:9913

Configuration

  1. Configure your .env for VarDumper
VAR_DUMPER_FORMAT=server
VAR_DUMPER_SERVER=127.0.0.1:9912
  1. Configure your .env for mail
MAIL_MAILER=smtp
MAIL_HOST=127.0.0.1
MAIL_PORT=1025
  1. Configure your .env for Sentry package
SENTRY_LARAVEL_DSN=http://[email protected]:23517/1
  1. Configure your .env for Ray package
RAY_HOST=127.0.0.1  # Debugger host
RAY_PORT=23517      # Debugger port
  1. Configure your .env for monolog logs

Socket

Add a new channel to config file config/logging.php

'channels' => [
     ...

    'socket' => [
        'driver' => 'monolog',
        'level' => env('LOG_LEVEL', 'debug'),
        'handler' => \Monolog\Handler\SocketHandler::class,
        'formatter' => \Monolog\Formatter\JsonFormatter::class,
        'handler_with' => [
            'connectionString' => env('LOG_SOCKET_URL', '127.0.0.1:9913'),
        ],
    ],
]

the set default channel to socket

LOG_CHANNEL=socket
LOG_SOCKET_URL=127.0.0.1:9913

Slack

LOG_CHANNEL=slack
LOG_SLACK_WEBHOOK_URL=http://127.0.0.1:23517/slack

That's it. Now you open http://127.0.0.1:23517 url in your browser or terminal and collect dump output from your application.

Enjoy!


Contributing

There are several projects in this repo with unresolved issues and it would be great if you help a community solving them.

Server requirements

  1. PHP 8.0
  2. Swoole 4.7
  3. NodeJS

Installation

  1. Clone repository
  2. Run composer `composer install
  3. Run npm npm i
  4. Run HTTP server php artisan server:start --host=127.0.0.1 --port=23517
  5. Run SMTP server php artisan smtp:start --host=127.0.0.1 --port=1025
  6. Run var-dumper server php artisan dump-server:start --host=127.0.0.1 --port=9912
  7. Run monolog server php artisan monolog:start --host=127.0.0.1 --port=9913
  8. Build npm npm run prod

License

Buggregator is open-sourced software licensed under the MIT license.

GitHub

https://github.com/buggregator/app
Comments
  • 1. how to start without docker?

    i have this error when opening the page

    Warning: Unknown: Failed to open stream: No such file or directory in Unknown on line 0

    Fatal error: Failed opening required '/Volumes/MacData/work/buggregator/server.php' (include_path='.:/usr/local/Cellar/php/8.0.12/share/php/pear') in Unknown on line 0

    Reviewed by anditsung at 2022-04-09 01:17
  • 2. Get the UI which is shown on the homepage

    When I pull the latest version of buggregator from docker hub I get the app version which is shown in the images in the Readme but when I saw the version on the website I fell in love with that UI. I did not find a way in the readme to be able to get that version I might miss something but is there a way to get this fancy looking version?

    Screenshot 2022-03-22 at 22 15 02

    By the way; I love working with buggregator it really makes me more productive if there is a way I can fund you some coffee please let me know!

    Reviewed by dstollie at 2022-03-22 21:16
  • 3. Using vue-ray, or js-ray etc - In browser Ray is being blocked by CORS policy

    CORS allowed headers are missing.

    Still didn't dive into source code. Is this something you would accept a PR?

    Or you see this is missing, and easy fix on your end?

    image

    Reviewed by ijpatricio at 2022-02-16 10:58
  • 4. mail server seems to cache emails and is not refreshing

    hi, I have found some strange behavior.

    I am using buggregator as a smtp server, but it keeps showing the same email message over and over.

    not sure if it caches it somehow or is not refreshing or something...

    cheers, dan

    Reviewed by danielzzz at 2021-11-29 14:23
  • 5. is it possible to password protect the dashboard

    hi,

    is it possible to somehow password protect the dashboard?

    this would be useful for tracking live servers. I know I could tunnel it to my local installation, but with more developers it get's a bit complicated.

    thanks, cheers, dan

    Reviewed by danielzzz at 2021-11-25 12:48
  • 6. Use termwind to format console output

    Termwind allows you to build unique and beautiful PHP command-line applications, using the Tailwind CSS API. In short, it's like Tailwind CSS, but for the PHP command-line applications.

    See https://github.com/nunomaduro/termwind

    Reviewed by butschster at 2021-10-11 15:46
  • 7. Adds ability to enable password protection for dashboard

    By default, Buggregator doesn't use any authentication, but you can enable it via ENV variables.

    AUTH_ENABLED=true
    AUTH_USERNAME=admin  # optional
    AUTH_PASSWORD=secret # optional
    

    After server starting login and password will be shown in a terminal.

    fixes #57

    Reviewed by butschster at 2021-11-25 21:34
  • 8. Issues with SQL Database locked

    I've been playing with Buggregator recently via Docker, but keep hitting this error:

    [2022-03-10 14:24:02] production.ERROR: SQLSTATE[HY000]: General error: 5 database is locked {"exception":"[object] (Cycle\\Database\\Exception\\StatementException(code: 0): SQLSTATE[HY000]: General error: 5 database is locked at /app/vendor/cycle/database/src/Driver/SQLite/SQLiteDriver.php:39)

    I'm primarily using the v2.0.0-beta Docker image on an M1 Mac, both from DockerHub (using Rosetta to run the x86 image on ARM), and building it locally (ARM on ARM).

    After starting the server and sending a larger amount of data, I get the following:

    ➜  MoodleRay git:(main) ✗ docker logs ray
    SQLite database file [/app/database/database.sqlite] is created.
    Migrate 0_default_create_events
    Migrate 0_default_create_users
    Migrate 0_default_create_stored_events
    Authentication is disabled.
    [INFO] RoadRunner server started; version: 2.6.3, buildtime: 2021-12-03T11:37:00+0000
    [2022-03-10 14:26:25] production.ERROR: Cycle\Database\Driver\Driver::getPDO(): Return value must be of type PDO, null returned {"exception":"[object] (Cycle\\Database\\Exception\\StatementException(code: 0): Cycle\\Database\\Driver\\Driver::getPDO(): Return value must be of type PDO, null returned at /app/vendor/cycle/database/src/Driver/SQLite/SQLiteDriver.php:39)
    [stacktrace]
    #0 /app/vendor/cycle/database/src/Driver/Driver.php(322): Cycle\\Database\\Driver\\SQLite\\SQLiteDriver->mapException(Object(TypeError), 'BEGIN TRANSACTI...')
    #1 /app/vendor/cycle/orm/src/Transaction/Runner.php(159): Cycle\\Database\\Driver\\Driver->beginTransaction()
    #2 /app/vendor/cycle/orm/src/Transaction/Runner.php(58): Cycle\\ORM\\Transaction\\Runner->prepareTransaction(Object(Infrastructure\\CycleOrm\\Database\\Drivers\\SQLiteDriver))
    #3 /app/vendor/cycle/orm/src/Transaction/UnitOfWork.php(152): Cycle\\ORM\\Transaction\\Runner->run(Object(Cycle\\ORM\\Command\\Database\\Insert))
    #4 /app/vendor/cycle/orm/src/Transaction/UnitOfWork.php(372): Cycle\\ORM\\Transaction\\UnitOfWork->runCommand(Object(Cycle\\ORM\\Command\\Database\\Insert))
    #5 /app/vendor/cycle/orm/src/Transaction/UnitOfWork.php(424): Cycle\\ORM\\Transaction\\UnitOfWork->resolveSelfWithEmbedded(Object(Cycle\\ORM\\Transaction\\Tuple), Object(Cycle\\ORM\\RelationMap), false)
    #6 /app/vendor/cycle/orm/src/Transaction/UnitOfWork.php(233): Cycle\\ORM\\Transaction\\UnitOfWork->resolveRelations(Object(Cycle\\ORM\\Transaction\\Tuple))
    #7 /app/vendor/cycle/orm/src/Transaction/UnitOfWork.php(99): Cycle\\ORM\\Transaction\\UnitOfWork->walkPool()
    #8 /app/vendor/cycle/orm/src/EntityManager.php(47): Cycle\\ORM\\Transaction\\UnitOfWork->run()
    #9 /app/app/Modules/Events/Application/Commands/StoreEvent/Handler.php(36): Cycle\\ORM\\EntityManager->run()
    #10 /app/app/Modules/Events/Application/Commands/StoreEvent/Handler.php(47): Modules\\Events\\Application\\Commands\\StoreEvent\\Handler->handle(Object(Modules\\Events\\Application\\Commands\\StoreEvent\\Command))
    #11 /app/vendor/symfony/messenger/Middleware/HandleMessageMiddleware.php(96): Modules\\Events\\Application\\Commands\\StoreEvent\\Handler->__invoke(Object(App\\Commands\\HandleReceivedEvent))
    #12 /app/vendor/symfony/messenger/MessageBus.php(77): Symfony\\Component\\Messenger\\Middleware\\HandleMessageMiddleware->handle(Object(Symfony\\Component\\Messenger\\Envelope), Object(Symfony\\Component\\Messenger\\Middleware\\StackMiddleware))
    #13 /app/app/Infrastructure/Bus/Command/MessengerCommandBus.php(31): Symfony\\Component\\Messenger\\MessageBus->dispatch(Object(App\\Commands\\HandleReceivedEvent))
    #14 /app/app/Modules/Ray/Interfaces/Http/Controllers/StoreEventAction.php(41): Infrastructure\\Bus\\Command\\MessengerCommandBus->dispatch(Object(App\\Commands\\HandleReceivedEvent))
    #15 /app/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): Modules\\Ray\\Interfaces\\Http\\Controllers\\StoreEventAction->__invoke(Object(Illuminate\\Http\\Request), Object(Infrastructure\\Bus\\Command\\MessengerCommandBus), Object(Illuminate\\Cache\\Repository), Object(Modules\\Ray\\EventHandler), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
    #16 /app/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('__invoke', Array)
    #17 /app/vendor/laravel/framework/src/Illuminate/Routing/Route.php(262): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(Modules\\Ray\\Interfaces\\Http\\Controllers\\StoreEventAction), '__invoke')
    #18 /app/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
    #19 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(695): Illuminate\\Routing\\Route->run()
    #20 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
    #21 /app/vendor/inertiajs/inertia-laravel/src/Middleware.php(82): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #22 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Inertia\\Middleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #23 /app/app/Interfaces/Http/Middleware/ShareInertiaData.php(30): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #24 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Interfaces\\Http\\Middleware\\ShareInertiaData->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #25 /app/app/Interfaces/Http/Middleware/SubstituteUuids.php(34): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #26 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Interfaces\\Http\\Middleware\\SubstituteUuids->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #27 /app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #28 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #29 /app/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #30 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #31 /app/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #32 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Session\\Middleware\\AuthenticateSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #33 /app/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #34 /app/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest(Object(Illuminate\\Http\\Request), Object(Illuminate\\Session\\Store), Object(Closure))
    #35 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #36 /app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #37 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #38 /app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #39 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #40 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #41 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(697): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
    #42 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(672): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
    #43 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(636): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
    #44 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(625): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
    #45 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
    #46 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
    #47 /app/vendor/spiral/roadrunner-laravel/src/Dumper/Middleware.php(45): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #48 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Spiral\\RoadRunnerLaravel\\Dumper\\Middleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #49 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #50 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #51 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #52 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #53 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #54 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #55 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #56 /app/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #57 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #58 /app/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #59 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Http\\Middleware\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #60 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #61 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
    #62 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
    #63 /app/vendor/spiral/roadrunner-laravel/src/Worker.php(113): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
    #64 /app/vendor/spiral/roadrunner-laravel/src/Console/Commands/StartCommand.php(112): Spiral\\RoadRunnerLaravel\\Worker->start(Object(Spiral\\RoadRunnerLaravel\\WorkerOptions))
    #65 /app/vendor/symfony/console/Command/Command.php(298): Spiral\\RoadRunnerLaravel\\Console\\Commands\\StartCommand->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\StreamOutput))
    #66 /app/vendor/symfony/console/Application.php(1005): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\StreamOutput))
    #67 /app/vendor/symfony/console/Application.php(299): Symfony\\Component\\Console\\Application->doRunCommand(Object(Spiral\\RoadRunnerLaravel\\Console\\Commands\\StartCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\StreamOutput))
    #68 /app/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\StreamOutput))
    #69 /app/bin/rr-worker(74): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\StreamOutput))
    #70 {main}
    
    [previous exception] [object] (TypeError(code: 0): Cycle\\Database\\Driver\\Driver::getPDO(): Return value must be of type PDO, null returned at /app/vendor/cycle/database/src/Driver/Driver.php:662)
    [stacktrace]
    #0 /app/vendor/cycle/database/src/Driver/Driver.php(320): Cycle\\Database\\Driver\\Driver->getPDO()
    #1 /app/vendor/cycle/orm/src/Transaction/Runner.php(159): Cycle\\Database\\Driver\\Driver->beginTransaction()
    #2 /app/vendor/cycle/orm/src/Transaction/Runner.php(58): Cycle\\ORM\\Transaction\\Runner->prepareTransaction(Object(Infrastructure\\CycleOrm\\Database\\Drivers\\SQLiteDriver))
    #3 /app/vendor/cycle/orm/src/Transaction/UnitOfWork.php(152): Cycle\\ORM\\Transaction\\Runner->run(Object(Cycle\\ORM\\Command\\Database\\Insert))
    #4 /app/vendor/cycle/orm/src/Transaction/UnitOfWork.php(372): Cycle\\ORM\\Transaction\\UnitOfWork->runCommand(Object(Cycle\\ORM\\Command\\Database\\Insert))
    #5 /app/vendor/cycle/orm/src/Transaction/UnitOfWork.php(424): Cycle\\ORM\\Transaction\\UnitOfWork->resolveSelfWithEmbedded(Object(Cycle\\ORM\\Transaction\\Tuple), Object(Cycle\\ORM\\RelationMap), false)
    #6 /app/vendor/cycle/orm/src/Transaction/UnitOfWork.php(233): Cycle\\ORM\\Transaction\\UnitOfWork->resolveRelations(Object(Cycle\\ORM\\Transaction\\Tuple))
    #7 /app/vendor/cycle/orm/src/Transaction/UnitOfWork.php(99): Cycle\\ORM\\Transaction\\UnitOfWork->walkPool()
    #8 /app/vendor/cycle/orm/src/EntityManager.php(47): Cycle\\ORM\\Transaction\\UnitOfWork->run()
    #9 /app/app/Modules/Events/Application/Commands/StoreEvent/Handler.php(36): Cycle\\ORM\\EntityManager->run()
    #10 /app/app/Modules/Events/Application/Commands/StoreEvent/Handler.php(47): Modules\\Events\\Application\\Commands\\StoreEvent\\Handler->handle(Object(Modules\\Events\\Application\\Commands\\StoreEvent\\Command))
    #11 /app/vendor/symfony/messenger/Middleware/HandleMessageMiddleware.php(96): Modules\\Events\\Application\\Commands\\StoreEvent\\Handler->__invoke(Object(App\\Commands\\HandleReceivedEvent))
    #12 /app/vendor/symfony/messenger/MessageBus.php(77): Symfony\\Component\\Messenger\\Middleware\\HandleMessageMiddleware->handle(Object(Symfony\\Component\\Messenger\\Envelope), Object(Symfony\\Component\\Messenger\\Middleware\\StackMiddleware))
    #13 /app/app/Infrastructure/Bus/Command/MessengerCommandBus.php(31): Symfony\\Component\\Messenger\\MessageBus->dispatch(Object(App\\Commands\\HandleReceivedEvent))
    #14 /app/app/Modules/Ray/Interfaces/Http/Controllers/StoreEventAction.php(41): Infrastructure\\Bus\\Command\\MessengerCommandBus->dispatch(Object(App\\Commands\\HandleReceivedEvent))
    #15 /app/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): Modules\\Ray\\Interfaces\\Http\\Controllers\\StoreEventAction->__invoke(Object(Illuminate\\Http\\Request), Object(Infrastructure\\Bus\\Command\\MessengerCommandBus), Object(Illuminate\\Cache\\Repository), Object(Modules\\Ray\\EventHandler), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
    #16 /app/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('__invoke', Array)
    #17 /app/vendor/laravel/framework/src/Illuminate/Routing/Route.php(262): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(Modules\\Ray\\Interfaces\\Http\\Controllers\\StoreEventAction), '__invoke')
    #18 /app/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
    #19 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(695): Illuminate\\Routing\\Route->run()
    #20 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
    #21 /app/vendor/inertiajs/inertia-laravel/src/Middleware.php(82): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #22 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Inertia\\Middleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #23 /app/app/Interfaces/Http/Middleware/ShareInertiaData.php(30): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #24 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Interfaces\\Http\\Middleware\\ShareInertiaData->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #25 /app/app/Interfaces/Http/Middleware/SubstituteUuids.php(34): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #26 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Interfaces\\Http\\Middleware\\SubstituteUuids->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #27 /app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #28 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #29 /app/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #30 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #31 /app/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #32 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Session\\Middleware\\AuthenticateSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #33 /app/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #34 /app/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest(Object(Illuminate\\Http\\Request), Object(Illuminate\\Session\\Store), Object(Closure))
    #35 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #36 /app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #37 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #38 /app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #39 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #40 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #41 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(697): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
    #42 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(672): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
    #43 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(636): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
    #44 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(625): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
    #45 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
    #46 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
    #47 /app/vendor/spiral/roadrunner-laravel/src/Dumper/Middleware.php(45): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #48 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Spiral\\RoadRunnerLaravel\\Dumper\\Middleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #49 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #50 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #51 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #52 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #53 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #54 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #55 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #56 /app/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #57 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #58 /app/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #59 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Http\\Middleware\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
    #60 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
    #61 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
    #62 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
    #63 /app/vendor/spiral/roadrunner-laravel/src/Worker.php(113): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
    #64 /app/vendor/spiral/roadrunner-laravel/src/Console/Commands/StartCommand.php(112): Spiral\\RoadRunnerLaravel\\Worker->start(Object(Spiral\\RoadRunnerLaravel\\WorkerOptions))
    #65 /app/vendor/symfony/console/Command/Command.php(298): Spiral\\RoadRunnerLaravel\\Console\\Commands\\StartCommand->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\StreamOutput))
    #66 /app/vendor/symfony/console/Application.php(1005): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\StreamOutput))
    #67 /app/vendor/symfony/console/Application.php(299): Symfony\\Component\\Console\\Application->doRunCommand(Object(Spiral\\RoadRunnerLaravel\\Console\\Commands\\StartCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\StreamOutput))
    #68 /app/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\StreamOutput))
    #69 /app/bin/rr-worker(74): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\StreamOutput))
    #70 {main}
    "}
    +---------+------------------------------------------------------+
    |  date   |  Thu, 10 Mar 2022 14:26:28 +0000                     |
    |  source |  setup.php on line 441                               |
    |  file   |  /Users/nicols/Sites/moodles/sm/moodle/lib/setup.php |
    +---------+------------------------------------------------------+
     RAY  Log
    
      1▕ array:4 [
      2▕   "identifer" => "asdf"
      3▕   "component" => "core"
      4▕   "a" => null
      5▕   "lang" => "en"
      6▕ ]
    
    
    Reviewed by andrewnicols at 2022-03-10 14:27
  • 9. Labels for screens

    Hi

    Is it possible to have the screen label in the selector itself, instead just the blue circle? If many screens are opened it is hard to know which one is which.

    Also, is it possible not to automatically change the active screen when a message is received. If I am currently reviewing a message and new one is received in another screen, I am automatically moved to the new screen. Instead of automatically change the active screen, maybe just highlight the screen button on the screen selector on the top.

    Thanks galiganu

    Reviewed by galiganu at 2021-11-13 10:29
😎 Tracy: the addictive tool to ease debugging PHP code for cool developers. Friendly design, logging, profiler, advanced features like debugging AJAX calls or CLI support. You will love it.
😎 Tracy: the addictive tool to ease debugging PHP code for cool developers. Friendly design, logging, profiler, advanced features like debugging AJAX calls or CLI support. You will love it.

Tracy - PHP debugger Introduction Tracy library is a useful helper for everyday PHP programmers. It helps you to: quickly detect and correct errors lo

May 20, 2022
Xdebug — Step Debugger and Debugging Aid for PHP

Xdebug Xdebug is a debugging tool for PHP. It provides step-debugging and a whole range of development aids, such as stack traces, a code profiler, fe

May 13, 2022
Kint - a powerful and modern PHP debugging tool.
Kint - a powerful and modern PHP debugging tool.

Kint - debugging helper for PHP developers What am I looking at? At first glance Kint is just a pretty replacement for var_dump(), print_r() and debug

May 14, 2022
A collection of helper methods for testing and debugging API endpoints.

Laravel API Test Helpers This is a collection of helper methods for testing and debugging API endpoints. Installation You can install the package via

Apr 16, 2022
The ultimate debugging and development tool for ProcessWire
The ultimate debugging and development tool for ProcessWire

Tracy Debugger for ProcessWire The ultimate “swiss army knife” debugging and development tool for the ProcessWire CMF/CMS Integrates and extends Nette

Apr 14, 2022
Sage - Insightful PHP debugging assistant ☯
 Sage - Insightful PHP debugging assistant ☯

Sage - Insightful PHP debugging assistant ☯ At first glance Sage is just a pretty replacement for var_dump() and debug_backtrace(). However, it's much

May 4, 2022
WordPress debugging made simple.
WordPress debugging made simple.

Loginator Debugging WordPress can sometimes be a pain, our goal is to make it easy, which is why Loginator was built with this in mind. From creating

Feb 12, 2022
A beautiful error page for Laravel apps
A beautiful error page for Laravel apps

Ignition: a beautiful error page for Laravel apps Ignition is a beautiful and customizable error page for Laravel applications running on Laravel 5.5

May 13, 2022
Clockwork - php dev tools in your browser - server-side component
Clockwork - php dev tools in your browser - server-side component

Clockwork is a development tool for PHP available right in your browser. Clockwork gives you an insight into your application runtime - including requ

May 18, 2022
Runs artisan command in web application
Runs artisan command in web application

Laravel Terminal Installation composer require recca0120/terminal --dev OR Add Presenter to your composer.json file: "require-dev": { "recca0120/t

May 6, 2022
Silex Web Profiler

The Silex Web Profiler service provider allows you to use the wonderful Symfony web debug toolbar and the Symfony profiler in your Silex 2.x application.

Nov 12, 2021
Generate Laravel test factories from your existing models

Laravel Test Factory Generator php artisan generate:model-factory This package will generate factories from your existing models so you can get starte

May 15, 2022
Php Debugger to run in terminal to debug your code easily.
Php Debugger to run in terminal to debug your code easily.

What is Dephpugger? Dephpugger (read depugger) is an open source lib to make a debug in php direct in terminal, without necessary configure an IDE. Th

Jan 12, 2022
Test your routes without hassle
Test your routes without hassle

Laravel Api Tester Live demo Try it out: laravel-api-tester.asva.by Docs Those are short and easy to read. Take a look. Interface FAQ Installation Req

Apr 26, 2022
An artisan command to tail your application logs
An artisan command to tail your application logs

Easily tail your logs This package offers an artisan command to tail the application log. It supports daily and single logs on your local machine. To

May 10, 2022
Php Debugger to run in terminal to debug your code easily.
Php Debugger to run in terminal to debug your code easily.

What is Dephpugger? Dephpugger (read depugger) is an open source library that allows a developer to debug in php direct in terminal, without necessary

May 20, 2022
A simple Craft module, inspired by Mildly Geeky's "Kint", to debug Twig within your browser
A simple Craft module, inspired by Mildly Geeky's

A simple Craft module, inspired by Mildly Geeky's "Kint", to debug Twig within your browser

Feb 2, 2022
Laravel Dumper - Improve the default output of dump() and dd() in Laravel projects

Laravel Dumper Improve the default output of dump() and dd() in Laravel projects. Improves the default dump behavior for many core Laravel objects, in

May 25, 2022
This package connects a Laravel Octance application with Tideways for PHP Monitoring, Profiling and Exception Tracking.

Tideways Middleware for Laravel Octane This package connects a Laravel Octance application with Tideways for PHP Monitoring, Profiling and Exception T

Jan 6, 2022