Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitff0cf61

Browse files
committed
feature#40761 [MonologBridge] Reset loggers on workers (l-vo)
This PR was merged into the 5.3-dev branch.Discussion----------[MonologBridge] Reset loggers on workers| Q | A| ------------- | ---| Branch? | 5.x| Bug fix? | no| New feature? | yes| Deprecations? | no| Tickets || License | MIT| Doc PR |This PR tries to solve some problems with buffered handlers (FingerCrossed) in workers.Let's consider the default configuration (`stop_buffering: true`):- When the threshold is crossed, all logs are flushed. Logs for the current message but also logs of previous messages in the buffer. Although buffer is limited `buffer_size`, it's a shame to keep logs of previous messages.- When the threshold is crossed, buffering is disabled. So finger crossed configuration is not used anymore, all the logs are flushed as soon as they are written.Then with (`stop_buffering: false`) (why isn't this the default configuration ?)- It's a bit better since buffering isn't disabled when the threshold is crossed- Like with `stop_buffering: true`, logs of previous messages are kept in memoryIn a similar way of `DoctrineClearEntityManagerWorkerSubscriber`, this PR adds a `ResetLoggersWorkerSubscribber` to reset resettable loggers.Integration in Monolog bundle:symfony/monolog-bundle#403Commits-------1d2f7f1 [Messenger] Reset loggers on workers
2 parents64cc548 +1d2f7f1 commitff0cf61

File tree

4 files changed

+141
-1
lines changed

4 files changed

+141
-1
lines changed

‎src/Symfony/Bridge/Monolog/CHANGELOG.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
CHANGELOG
22
=========
33

4+
5.3
5+
---
6+
7+
* Add`ResetLoggersWorkerSubscriber` to reset buffered logs in messenger workers
8+
49
5.2.0
510
-----
611

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespaceSymfony\Bridge\Monolog\Messenger;
13+
14+
useMonolog\ResettableInterface;
15+
useSymfony\Component\EventDispatcher\EventSubscriberInterface;
16+
useSymfony\Component\Messenger\Event\WorkerMessageFailedEvent;
17+
useSymfony\Component\Messenger\Event\WorkerMessageHandledEvent;
18+
19+
/**
20+
* Reset loggers between messages being handled to release buffered handler logs.
21+
*
22+
* @author Laurent VOULLEMIER <laurent.voullemier@gmail.com>
23+
*/
24+
class ResetLoggersWorkerSubscriberimplements EventSubscriberInterface
25+
{
26+
private$loggers;
27+
28+
publicfunction__construct(iterable$loggers)
29+
{
30+
$this->loggers =$loggers;
31+
}
32+
33+
publicstaticfunctiongetSubscribedEvents():array
34+
{
35+
return [
36+
WorkerMessageHandledEvent::class =>'resetLoggers',
37+
WorkerMessageFailedEvent::class =>'resetLoggers',
38+
];
39+
}
40+
41+
publicfunctionresetLoggers():void
42+
{
43+
foreach ($this->loggersas$logger) {
44+
if ($loggerinstanceof ResettableInterface) {
45+
$logger->reset();
46+
}
47+
}
48+
}
49+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespaceSymfony\Bridge\Monolog\Tests\Messenger;
13+
14+
useMonolog\Handler\BufferHandler;
15+
useMonolog\Handler\TestHandler;
16+
usePHPUnit\Framework\TestCase;
17+
useSymfony\Bridge\Monolog\Logger;
18+
useSymfony\Bridge\Monolog\Messenger\ResetLoggersWorkerSubscriber;
19+
useSymfony\Component\EventDispatcher\EventDispatcher;
20+
useSymfony\Component\Messenger\Envelope;
21+
useSymfony\Component\Messenger\Event\WorkerRunningEvent;
22+
useSymfony\Component\Messenger\Handler\HandlersLocator;
23+
useSymfony\Component\Messenger\MessageBus;
24+
useSymfony\Component\Messenger\Middleware\HandleMessageMiddleware;
25+
useSymfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
26+
useSymfony\Component\Messenger\Worker;
27+
28+
class ResetLoggersWorkerSubscriberTestextends TestCase
29+
{
30+
publicfunctiontestLogsAreFlushed()
31+
{
32+
$loggerTestHandler =newTestHandler();
33+
$loggerTestHandler->setSkipReset(true);
34+
35+
$logger =newLogger('', [newBufferHandler($loggerTestHandler)]);
36+
37+
$message =newclass() {
38+
};
39+
40+
$handler =staticfunction (object$message)use ($logger):void {
41+
$logger->info('Message of class {class} is being handled', ['class' =>\get_class($message)]);
42+
};
43+
44+
$handlersMiddleware =newHandleMessageMiddleware(newHandlersLocator([
45+
\get_class($message) => [$handler],
46+
]));
47+
48+
$eventDispatcher =newEventDispatcher();
49+
$eventDispatcher->addSubscriber(newResetLoggersWorkerSubscriber([$logger]));
50+
$eventDispatcher->addListener(WorkerRunningEvent::class,staticfunction (WorkerRunningEvent$event):void {
51+
$event->getWorker()->stop();// Limit the worker to one loop
52+
});
53+
54+
$bus =newMessageBus([$handlersMiddleware]);
55+
$worker =newWorker([$this->createReceiver($message)],$bus,$eventDispatcher);
56+
$worker->run();
57+
58+
$this->assertCount(1,$loggerTestHandler->getRecords());
59+
}
60+
61+
privatefunctioncreateReceiver(object$message):ReceiverInterface
62+
{
63+
returnnewclass($message)implements ReceiverInterface {
64+
private$message;
65+
66+
publicfunction__construct(object$message)
67+
{
68+
$this->message =$message;
69+
}
70+
71+
publicfunctionget():iterable
72+
{
73+
return [newEnvelope($this->message)];
74+
}
75+
76+
publicfunctionack(Envelope$envelope):void
77+
{
78+
}
79+
80+
publicfunctionreject(Envelope$envelope):void
81+
{
82+
}
83+
};
84+
}
85+
}

‎src/Symfony/Bridge/Monolog/composer.json‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
"symfony/security-core":"^4.4|^5.0",
2929
"symfony/var-dumper":"^4.4|^5.0",
3030
"symfony/mailer":"^4.4|^5.0",
31-
"symfony/mime":"^4.4|^5.0"
31+
"symfony/mime":"^4.4|^5.0",
32+
"symfony/messenger":"^4.4|^5.0"
3233
},
3334
"conflict": {
3435
"symfony/console":"<4.4",

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp