Skip to content

Commit 1575022

Browse files
authored
Merge pull request #166 from hungthai1401/feature/psr-logger
Integrate psr-logger
2 parents 273153b + 2ea9bb0 commit 1575022

File tree

4 files changed

+93
-2
lines changed

4 files changed

+93
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ The format is based on [Keep a Changelog][keepachangelog] and this project adher
88

99
- gRPC client support
1010
- Added support to set queue options globally or per job [#158]
11+
- Add PSR-3 compatible logging with RoadRunner integration
1112

1213
## Unreleased
1314

README.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ This package provides complete Laravel integration with RoadRunner, offering:
1717
- Support for HTTP and other RoadRunner plugins like gRPC, Queue, KeyValue, and more.
1818
- [Temporal](https://temporal.io/) integration
1919
- Full RoadRunner configuration control
20+
- PSR-3 compatible logging with RoadRunner integration
2021

2122
![RoadRunner](https://github.com/user-attachments/assets/609d2e29-b6af-478b-b350-1d27b77ed6fb)
2223

@@ -36,6 +37,7 @@ This package provides complete Laravel integration with RoadRunner, offering:
3637
- [gRPC Plugin](#grpc-plugin)
3738
- [gRPC Client](#grpc-client)
3839
- [Temporal](#temporal)
40+
- [Logging](#logging)
3941
- [Custom Workers](#custom-workers)
4042
- [Support](#support)
4143
- [License](#license)
@@ -331,6 +333,56 @@ Start the Temporal dev server:
331333
- [Code samples](https://github.com/temporalio/samples-php)
332334
- [Taxi service sample](https://github.com/butschster/podlodka-taxi-service)
333335

336+
## Logging
337+
338+
The RoadRunner PSR Logger provides PSR-3 compatible logging with RoadRunner integration. The logger uses RPC calls to send logs to RoadRunner's centralized logging system, providing proper log level control and structured context support.
339+
340+
### Usage
341+
342+
The RoadRunner PSR Logger is available throughout your application via dependency injection:
343+
344+
#### Dependency Injection (Recommended)
345+
346+
```php
347+
use Psr\Log\LoggerInterface;
348+
349+
class YourService
350+
{
351+
public function __construct(
352+
private LoggerInterface $logger
353+
) {}
354+
355+
public function doSomething()
356+
{
357+
$this->logger->info('Operation started');
358+
359+
try {
360+
// Your logic here
361+
$this->logger->info('Operation completed');
362+
} catch (\Exception $e) {
363+
$this->logger->error('Operation failed', [
364+
'exception' => $e->getMessage(),
365+
'trace' => $e->getTraceAsString()
366+
]);
367+
}
368+
}
369+
}
370+
```
371+
372+
#### Service Container Resolution
373+
374+
```php
375+
// Get logger from container
376+
$logger = app(LoggerInterface::class);
377+
// Or using the alias
378+
$logger = app('roadrunner.logger');
379+
380+
$logger->info('Message', ['context' => 'data']);
381+
```
382+
383+
#### Useful Links
384+
- [RoadRunner PSR Logger](https://github.com/roadrunner-php/psr-logger)
385+
334386
## Custom Workers
335387

336388
The RoadRunner Laravel Bridge comes with several predefined workers for common plugins,

composer.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@
4343
"spiral/roadrunner-worker": "^3.0",
4444
"temporal/sdk": "^2.0",
4545
"internal/dload": "^1.1",
46-
"spiral/grpc-client": "^1.0.0-rc1"
46+
"spiral/grpc-client": "^1.0.0-rc1",
47+
"roadrunner/psr-logger": "^1.0"
4748
},
4849
"require-dev": {
4950
"laravel/framework": "^12.0",
@@ -93,7 +94,8 @@
9394
"Spiral\\RoadRunnerLaravel\\ServiceProvider",
9495
"Spiral\\RoadRunnerLaravel\\Queue\\QueueServiceProvider",
9596
"Spiral\\RoadRunnerLaravel\\Cache\\CacheServiceProvider",
96-
"Spiral\\RoadRunnerLaravel\\Temporal\\TemporalServiceProvider"
97+
"Spiral\\RoadRunnerLaravel\\Temporal\\TemporalServiceProvider",
98+
"Spiral\\RoadRunnerLaravel\\Logging\\LoggerServiceProvider"
9799
]
98100
}
99101
},
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Spiral\RoadRunnerLaravel\Logging;
6+
7+
use Illuminate\Support\ServiceProvider;
8+
use Psr\Log\LoggerInterface;
9+
use RoadRunner\Logger\Logger as AppLogger;
10+
use RoadRunner\PsrLogger\Context\DefaultProcessor;
11+
use RoadRunner\PsrLogger\RpcLogger;
12+
use Spiral\Goridge\RPC\Codec\ProtobufCodec;
13+
use Spiral\Goridge\RPC\RPC;
14+
use Spiral\RoadRunner\Environment;
15+
16+
final class LoggerServiceProvider extends ServiceProvider
17+
{
18+
public function register(): void
19+
{
20+
$this->app->singleton(LoggerInterface::class, function () {
21+
$env = Environment::fromGlobals();
22+
23+
/** @var non-empty-string $rpcAddress */
24+
$rpcAddress = $env->getRPCAddress();
25+
$rpc = RPC::create($rpcAddress)->withCodec(new ProtobufCodec());
26+
27+
$appLogger = new AppLogger($rpc);
28+
29+
$processor = DefaultProcessor::createDefault();
30+
31+
return new RpcLogger($appLogger, $processor);
32+
});
33+
34+
$this->app->alias(LoggerInterface::class, 'roadrunner.logger');
35+
}
36+
}

0 commit comments

Comments
 (0)