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

Commitdb1fa17

Browse files
committed
Make logger implement DebugLoggerInterface
1 parent1198986 commitdb1fa17

File tree

3 files changed

+134
-2
lines changed

3 files changed

+134
-2
lines changed

‎src/Symfony/Component/HttpKernel/DependencyInjection/LoggerPass.php‎

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@
1414
usePsr\Log\LoggerInterface;
1515
useSymfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
1616
useSymfony\Component\DependencyInjection\ContainerBuilder;
17+
useSymfony\Component\DependencyInjection\Definition;
18+
useSymfony\Component\DependencyInjection\Reference;
19+
useSymfony\Component\HttpFoundation\RequestStack;
1720
useSymfony\Component\HttpKernel\Log\Logger;
21+
useSymfony\Component\HttpKernel\Log\Recorder;
1822

1923
/**
2024
* Registers the default logger if necessary.
@@ -32,7 +36,21 @@ public function process(ContainerBuilder $container)
3236
return;
3337
}
3438

39+
$recorder =null;
40+
if ($container->getParameter('kernel.debug')) {
41+
$recorder =newDefinition(Recorder::class, ['$requestStack' =>newReference(RequestStack::class)]);
42+
}
43+
3544
$container->register('logger', Logger::class)
36-
->setPublic(false);
45+
->setPublic(false)
46+
->addMethodCall('setRecorder', [$recorder])
47+
->setConfigurator([__CLASS__,'configureLogger']);
48+
}
49+
50+
publicstaticfunctionconfigureLogger(mixed$logger)
51+
{
52+
if (\is_object($logger) &&method_exists($logger,'setRecorder') &&\in_array(\PHP_SAPI, ['cli','phpdbg'],true)) {
53+
$logger->setRecorder(null);
54+
}
3755
}
3856
}

‎src/Symfony/Component/HttpKernel/Log/Logger.php‎

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@
1414
usePsr\Log\AbstractLogger;
1515
usePsr\Log\InvalidArgumentException;
1616
usePsr\Log\LogLevel;
17+
useSymfony\Component\HttpFoundation\Request;
1718

1819
/**
1920
* Minimalist PSR-3 logger designed to write in stderr or any other stream.
2021
*
2122
* @author Kévin Dunglas <dunglas@gmail.com>
2223
*/
23-
class Loggerextends AbstractLogger
24+
class Loggerextends AbstractLoggerimplements DebugLoggerInterface
2425
{
2526
privateconstLEVELS = [
2627
LogLevel::DEBUG =>0,
@@ -39,6 +40,9 @@ class Logger extends AbstractLogger
3940
/** @var resource|null */
4041
private$handle;
4142

43+
/** @var Recorder|null */
44+
private$recorder;
45+
4246
/**
4347
* @param string|resource|null $output
4448
*/
@@ -69,6 +73,11 @@ public function __construct(string $minLevel = null, $output = null, callable $f
6973
}
7074
}
7175

76+
publicfunctionsetRecorder(?Recorder$recorder):void
77+
{
78+
$this->recorder =$recorder;
79+
}
80+
7281
publicfunctionlog($level,$message,array$context = []):void
7382
{
7483
if (!isset(self::LEVELS[$level])) {
@@ -85,6 +94,25 @@ public function log($level, $message, array $context = []): void
8594
}else {
8695
error_log($formatter($level,$message,$context,false));
8796
}
97+
98+
if ($this->recorder) {
99+
$this->recorder->record($level,$message,$context);
100+
}
101+
}
102+
103+
publicfunctiongetLogs(Request$request =null)
104+
{
105+
return$this->recorder?->getLogs($request) ?? [];
106+
}
107+
108+
publicfunctioncountErrors(Request$request =null)
109+
{
110+
return$this->recorder?->countErrors($request) ??0;
111+
}
112+
113+
publicfunctionclear()
114+
{
115+
$this->recorder?->clear();
88116
}
89117

90118
privatefunctionformat(string$level,string$message,array$context,bool$prefixDate =true):string
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
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\Component\HttpKernel\Log;
13+
14+
usePsr\Log\LogLevel;
15+
useSymfony\Component\HttpFoundation\Request;
16+
useSymfony\Component\HttpFoundation\RequestStack;
17+
18+
class Recorderimplements DebugLoggerInterface
19+
{
20+
privateconstPRIORITIES = [
21+
LogLevel::DEBUG =>100,
22+
LogLevel::INFO =>200,
23+
LogLevel::NOTICE =>250,
24+
LogLevel::WARNING =>300,
25+
LogLevel::ERROR =>400,
26+
LogLevel::CRITICAL =>500,
27+
LogLevel::ALERT =>550,
28+
LogLevel::EMERGENCY =>600,
29+
];
30+
31+
privatearray$logs = [];
32+
privatearray$errorCount = [];
33+
34+
publicfunction__construct(privatereadonlyRequestStack$requestStack)
35+
{
36+
}
37+
38+
publicfunctionrecord($level,$message,array$context):void
39+
{
40+
$request =$this->requestStack->getCurrentRequest();
41+
$hash =$request ?spl_object_hash($request) :'';
42+
43+
$this->logs[$hash][] = [
44+
'channel' =>null,
45+
'context' =>$context,
46+
'message' =>$message,
47+
'priority' =>self::PRIORITIES[$level],
48+
'priorityName' =>$level,
49+
'timestamp' =>time(),
50+
'timestamp_rfc3339' =>date(\DATE_RFC3339_EXTENDED),
51+
];
52+
53+
$this->errorCount[$hash] ??=0;
54+
switch ($level) {
55+
case LogLevel::ERROR:
56+
case LogLevel::CRITICAL:
57+
case LogLevel::ALERT:
58+
case LogLevel::EMERGENCY:
59+
++$this->errorCount[$hash];
60+
}
61+
}
62+
63+
publicfunctiongetLogs(Request$request =null):array
64+
{
65+
if ($request) {
66+
return$this->logs[spl_object_hash($request)] ?? [];
67+
}
68+
69+
returnarray_merge(...array_values($this->logs));
70+
}
71+
72+
publicfunctioncountErrors(Request$request =null):int
73+
{
74+
if ($request) {
75+
return$this->errorCount[spl_object_hash($request)] ??0;
76+
}
77+
78+
returnarray_sum($this->errorCount);
79+
}
80+
81+
publicfunctionclear()
82+
{
83+
$this->logs = [];
84+
$this->errorCount = [];
85+
}
86+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp