Laravel ShipSaasLogger enables the tracing of requests across servers by marking each request with a unique ID 🆔 for every log record of the given request.
Skyrocket your production debugging ⚒️.
Additionally, ShipSaasLogger solves the missing logs problem when you have a huge amount of traffic 😎. Making production logs more reliable and engineers won't have to scream "I can't find the logs" 🔥.
- Laravel 10+
- PHP 8.2+
Install the library:
composer require shipsaas/shipsaas-logger
We ship a new Logger driver called shipsaas-logger
which handles:
- Create log file based on the requestId, e.g.:
7a559daf-f1fe-4a97-8eb8-40d0907c986b.log
- Write request-based logs there
- A fallback to the default log file, if
requestId
is not presented
Thus, it fixes the missing logs issue because we have independent log files and not yolo-write into 1 file (which will mess up the logs when having high traffic) 🚀
Nowadays, we can just tell Sumologic (or Cloudwatch, DataDog, etc.) to sync your log folder (a whole folder) 🔥. All your logs will be synced on the cloud.
Add a new channel called shipsaas-logger
and change the configuration based on your needs
'shipsaas-logger' => [
'driver' => 'shipsaas-logger',
'path' => storage_path('logs/requests/laravel.log'), // can change to your desired path
'default_log_file' => storage_path('logs/laravel.log'), // can change to your desired path
'id-type' => 'ulid', // uuid, orderedUuid, ulid
'use_json_format' => false, // set to true to write log as JSON
],
Change the LOG_CHANNEL
to shipsaas-logger
LOG_CHANNEL=shipsaas-logger
Now that you have everything, hit some requests and try it out 😎.
class TransferController extends BaseController
{
public function transfer(): JsonResponse
{
Log::info('begin transfer', [
'amount' => ...,
'recipient' => ...,
]); // this log will have uniqueRequestId
// ...
Log::info('transferred', [
'amount' => ...,
'recipient' => ...,
'trasaction_id' => ...,
]); // this log will have uniqueRequestId
}
}
And also congrats, no more "missing logs" pain for your app 😉.
By simply putting this piece of code into your AppServiceProvider
:
// AppServiceProvider.php
use ShipSaasUniqueRequestLogger\UniqueRequestIdLoggerInitiator;
public function boot(): void
{
$this->app->booted(fn () => UniqueRequestIdLoggerInitiator::init());
}
Now that you have injected ShipSaaS Logger, hit some requests and try it out 😎.
Note: The Minimalism way only injects the UniqueRequestID generation into your application, it won't have any improvement for missing logs issue.
Run composer test
😆
- Seth Phat
Feel free to submit any PR, please follow PSR-1/PSR-12 coding conventions and testing is a must.
If this package is helpful, please give it a ⭐️⭐️⭐️. Thank you!
MIT License