Skip to content

Commit f72f69e

Browse files
bbatscheshiftedreality
authored andcommitted
MAGECLOUD-2288: Fix MIN_LOGGING_LEVEL Variable (#285)
1 parent f4fcbcf commit f72f69e

9 files changed

+114
-53
lines changed

src/App/Logger/HandlerFactory.php

+16-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
namespace Magento\MagentoCloud\App\Logger;
77

88
use Magento\MagentoCloud\App\Logger\Gelf\HandlerFactory as GelfHandlerFactory;
9+
use Magento\MagentoCloud\Config\GlobalSection;
910
use Magento\MagentoCloud\Config\Log as LogConfig;
1011
use Monolog\Handler\HandlerInterface;
1112
use Monolog\Handler\NativeMailerHandler;
@@ -43,37 +44,49 @@ class HandlerFactory
4344
*/
4445
private $gelfHandlerFactory;
4546

47+
/**
48+
* @var GlobalSection
49+
*/
50+
private $globalConfig;
51+
4652
/**
4753
* @param LevelResolver $levelResolver
4854
* @param LogConfig $logConfig
4955
* @param GelfHandlerFactory $gelfHandlerFactory
56+
* @param GlobalSection $globalConfig
5057
*/
5158
public function __construct(
5259
LevelResolver $levelResolver,
5360
LogConfig $logConfig,
54-
GelfHandlerFactory $gelfHandlerFactory
61+
GelfHandlerFactory $gelfHandlerFactory,
62+
GlobalSection $globalConfig
5563
) {
5664
$this->levelResolver = $levelResolver;
5765
$this->logConfig = $logConfig;
5866
$this->gelfHandlerFactory = $gelfHandlerFactory;
67+
$this->globalConfig = $globalConfig;
5968
}
6069

6170
/**
6271
* @param string $handler
6372
* @return HandlerInterface
6473
* @throws \Exception
74+
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
6575
*/
6676
public function create(string $handler): HandlerInterface
6777
{
6878
$configuration = $this->logConfig->get($handler);
69-
$minLevel = $this->levelResolver->resolve($configuration->get('min_level', LogConfig::LEVEL_NOTICE));
79+
$levelOverride = $this->globalConfig->get(GlobalSection::VAR_MIN_LOGGING_LEVEL);
80+
$defaultLevel = $levelOverride ?: LogConfig::LEVEL_NOTICE;
81+
$minLevel = $this->levelResolver->resolve($configuration->get('min_level', $defaultLevel));
7082

7183
switch ($handler) {
7284
case static::HANDLER_STREAM:
7385
case static::HANDLER_FILE:
86+
$defaultLevelStream = $levelOverride ?: LogConfig::LEVEL_INFO;
7487
$handlerInstance = new StreamHandler(
7588
$configuration->get('stream'),
76-
$this->levelResolver->resolve($configuration->get('min_level', LogConfig::LEVEL_INFO))
89+
$this->levelResolver->resolve($configuration->get('min_level', $defaultLevelStream))
7790
);
7891
break;
7992
case static::HANDLER_EMAIL:

src/App/Logger/LevelResolver.php

-16
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,13 @@
55
*/
66
namespace Magento\MagentoCloud\App\Logger;
77

8-
use Magento\MagentoCloud\Config\Environment;
98
use Monolog\Logger;
109

1110
/**
1211
* Resolves string level to int level from Logger.
1312
*/
1413
class LevelResolver
1514
{
16-
/**
17-
* @var Environment
18-
*/
19-
private $environment;
20-
2115
/**
2216
* @var array
2317
*/
@@ -32,22 +26,12 @@ class LevelResolver
3226
'emergency' => Logger::EMERGENCY,
3327
];
3428

35-
/**
36-
* @param Environment $environment
37-
*/
38-
public function __construct(Environment $environment)
39-
{
40-
$this->environment = $environment;
41-
}
42-
4329
/**
4430
* @param string $level
4531
* @return int
4632
*/
4733
public function resolve(string $level): int
4834
{
49-
$level = $this->environment->getMinLoggingLevel() ?: $level;
50-
5135
return $this->mapLevels[strtolower($level)] ?? Logger::NOTICE;
5236
}
5337
}

src/Config/Log.php

+6
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,14 @@ class Log
2020
/**
2121
* Log levels.
2222
*/
23+
const LEVEL_DEBUG = 'debug';
2324
const LEVEL_INFO = 'info';
2425
const LEVEL_NOTICE = 'notice';
26+
const LEVEL_WARNING = 'warning';
27+
const LEVEL_ERROR = 'error';
28+
const LEVEL_CRITICAL = 'critical';
29+
const LEVEL_ALERT = 'alert';
30+
const LEVEL_EMERGENCY = 'emergency';
2531

2632
/**
2733
* @var FileList

src/Config/Schema.php

+20
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,26 @@ public function getSchema()
191191
StageConfigInterface::STAGE_GLOBAL => [],
192192
],
193193
],
194+
StageConfigInterface::VAR_MIN_LOGGING_LEVEL => [
195+
self::SCHEMA_TYPE => ['string'],
196+
self::SCHEMA_VALUE_VALIDATION => [
197+
'',
198+
Log::LEVEL_DEBUG,
199+
Log::LEVEL_INFO,
200+
Log::LEVEL_NOTICE,
201+
Log::LEVEL_WARNING,
202+
Log::LEVEL_ERROR,
203+
Log::LEVEL_CRITICAL,
204+
Log::LEVEL_ALERT,
205+
Log::LEVEL_EMERGENCY,
206+
],
207+
self::SCHEMA_STAGE => [
208+
StageConfigInterface::STAGE_GLOBAL,
209+
],
210+
self::SCHEMA_DEFAULT_VALUE => [
211+
StageConfigInterface::STAGE_GLOBAL => '',
212+
],
213+
],
194214
DeployInterface::VAR_REDIS_USE_SLAVE_CONNECTION => [
195215
self::SCHEMA_TYPE => ['boolean'],
196216
self::SCHEMA_STAGE => [

src/Config/StageConfigInterface.php

+5
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ interface StageConfigInterface
4242
const VAR_DEPLOYED_MAGENTO_VERSION_FROM_GIT = 'DEPLOYED_MAGENTO_VERSION_FROM_GIT';
4343
const VAR_DEPLOY_FROM_GIT_OPTIONS = 'DEPLOY_FROM_GIT_OPTIONS';
4444

45+
/**
46+
* Default minimum logging level.
47+
*/
48+
const VAR_MIN_LOGGING_LEVEL = 'MIN_LOGGING_LEVEL';
49+
4550
/**
4651
* Option for enabling merging given configuration with default configuration
4752
*/

src/Test/Unit/App/Logger/HandlerFactoryTest.php

+65-8
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Magento\MagentoCloud\App\Logger\Gelf\HandlerFactory as GelfHandlerFactory;
1111
use Magento\MagentoCloud\App\Logger\HandlerFactory;
1212
use Magento\MagentoCloud\App\Logger\LevelResolver;
13+
use Magento\MagentoCloud\Config\GlobalSection;
1314
use Magento\MagentoCloud\Config\Log as LogConfig;
1415
use Monolog\Handler\HandlerInterface;
1516
use Monolog\Handler\NativeMailerHandler;
@@ -18,8 +19,8 @@
1819
use Monolog\Handler\SyslogHandler;
1920
use Monolog\Handler\SyslogUdpHandler;
2021
use Monolog\Logger;
22+
use PHPUnit\Framework\MockObject\MockObject;
2123
use PHPUnit\Framework\TestCase;
22-
use PHPUnit_Framework_MockObject_MockObject as Mock;
2324

2425
/**
2526
* @inheritdoc
@@ -29,25 +30,30 @@
2930
class HandlerFactoryTest extends TestCase
3031
{
3132
/**
32-
* @var LevelResolver|Mock
33+
* @var LevelResolver|MockObject
3334
*/
3435
private $levelResolverMock;
3536

3637
/**
37-
* @var LogConfig|Mock
38+
* @var LogConfig|MockObject
3839
*/
3940
private $logConfigMock;
4041

4142
/**
42-
* @var Repository|Mock
43+
* @var Repository|MockObject
4344
*/
4445
private $repositoryMock;
4546

4647
/**
47-
* @var GelfHandlerFactory|Mock
48+
* @var GelfHandlerFactory|MockObject
4849
*/
4950
private $gelfHandlerFactoryMock;
5051

52+
/**
53+
* @var GlobalSection|MockObject
54+
*/
55+
private $globalConfigMock;
56+
5157
/**
5258
* @var HandlerFactory
5359
*/
@@ -62,11 +68,13 @@ protected function setUp()
6268
$this->logConfigMock = $this->createMock(LogConfig::class);
6369
$this->repositoryMock = $this->createMock(Repository::class);
6470
$this->gelfHandlerFactoryMock = $this->createMock(GelfHandlerFactory::class);
71+
$this->globalConfigMock = $this->createMock(GlobalSection::class);
6572

6673
$this->handlerFactory = new HandlerFactory(
6774
$this->levelResolverMock,
6875
$this->logConfigMock,
69-
$this->gelfHandlerFactoryMock
76+
$this->gelfHandlerFactoryMock,
77+
$this->globalConfigMock
7078
);
7179
}
7280

@@ -128,23 +136,38 @@ public function testCreateGelfHandler()
128136
public function testCreate(
129137
string $handler,
130138
array $repositoryMockReturnMap,
131-
string $expectedClass
139+
$minLevelOverride,
140+
string $expectedClass,
141+
int $expectedLevel
132142
) {
133143
$this->logConfigMock->expects($this->once())
134144
->method('get')
135145
->with($handler)
136146
->willReturn($this->repositoryMock);
137147
$this->repositoryMock->method('get')
138148
->willReturnMap($repositoryMockReturnMap);
149+
$this->globalConfigMock->expects($this->once())
150+
->method('get')
151+
->with(GlobalSection::VAR_MIN_LOGGING_LEVEL)
152+
->willReturn($minLevelOverride);
153+
$this->levelResolverMock
154+
->method('resolve')
155+
->willReturnMap([
156+
[LogConfig::LEVEL_NOTICE, Logger::NOTICE],
157+
[LogConfig::LEVEL_INFO, Logger::INFO],
158+
[LogConfig::LEVEL_WARNING, Logger::WARNING],
159+
]);
139160

140161
$handlerInstance = $this->handlerFactory->create($handler);
141162

142163
$this->assertInstanceOf(HandlerInterface::class, $handlerInstance);
143164
$this->assertInstanceOf($expectedClass, $handlerInstance);
165+
$this->assertSame($expectedLevel, $handlerInstance->getLevel());
144166
}
145167

146168
/**
147169
* @return array
170+
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
148171
*/
149172
public function createDataProvider()
150173
{
@@ -156,7 +179,19 @@ public function createDataProvider()
156179
['min_level', LogConfig::LEVEL_NOTICE, LogConfig::LEVEL_NOTICE],
157180
['min_level', LogConfig::LEVEL_INFO, LogConfig::LEVEL_INFO],
158181
],
182+
'minLevelOverride' => '',
183+
'expectedClass' => StreamHandler::class,
184+
'expectedLevel' => Logger::INFO,
185+
],
186+
[
187+
'handler' => HandlerFactory::HANDLER_STREAM,
188+
'repositoryMockReturnMap' => [
189+
['stream', null, 'php://stdout'],
190+
['min_level', LogConfig::LEVEL_WARNING, LogConfig::LEVEL_WARNING],
191+
],
192+
'minLevelOverride' => LogConfig::LEVEL_WARNING,
159193
'expectedClass' => StreamHandler::class,
194+
'expectedLevel' => Logger::WARNING,
160195
],
161196
[
162197
'handler' => HandlerFactory::HANDLER_FILE,
@@ -165,7 +200,9 @@ public function createDataProvider()
165200
['min_level', LogConfig::LEVEL_NOTICE, LogConfig::LEVEL_NOTICE],
166201
['min_level', LogConfig::LEVEL_INFO, LogConfig::LEVEL_INFO],
167202
],
203+
'minLevelOverride' => '',
168204
'expectedClass' => StreamHandler::class,
205+
'expectedLevel' => Logger::INFO,
169206
],
170207
[
171208
'handler' => HandlerFactory::HANDLER_SLACK,
@@ -176,7 +213,21 @@ public function createDataProvider()
176213
['min_level', LogConfig::LEVEL_NOTICE, LogConfig::LEVEL_NOTICE],
177214
['min_level', LogConfig::LEVEL_INFO, LogConfig::LEVEL_INFO],
178215
],
216+
'minLevelOverride' => '',
179217
'expectedClass' => SlackHandler::class,
218+
'expectedLevel' => Logger::NOTICE,
219+
],
220+
[
221+
'handler' => HandlerFactory::HANDLER_SLACK,
222+
'repositoryMockReturnMap' => [
223+
['token', null, 'someToken'],
224+
['channel', 'general', 'someChannel'],
225+
['username', 'Slack Log Notifier', 'someUser'],
226+
['min_level', LogConfig::LEVEL_WARNING, LogConfig::LEVEL_WARNING],
227+
],
228+
'minLevelOverride' => LogConfig::LEVEL_WARNING,
229+
'expectedClass' => SlackHandler::class,
230+
'expectedLevel' => Logger::WARNING,
180231
],
181232
[
182233
'handler' => HandlerFactory::HANDLER_EMAIL,
@@ -187,7 +238,9 @@ public function createDataProvider()
187238
['min_level', LogConfig::LEVEL_NOTICE, LogConfig::LEVEL_NOTICE],
188239
['min_level', LogConfig::LEVEL_INFO, LogConfig::LEVEL_INFO],
189240
],
241+
'minLevelOverride' => '',
190242
'expectedClass' => NativeMailerHandler::class,
243+
'expectedLevel' => Logger::NOTICE,
191244
],
192245
[
193246
'handler' => HandlerFactory::HANDLER_SYSLOG,
@@ -199,7 +252,9 @@ public function createDataProvider()
199252
['min_level', LogConfig::LEVEL_NOTICE, LogConfig::LEVEL_NOTICE],
200253
['min_level', LogConfig::LEVEL_INFO, LogConfig::LEVEL_INFO],
201254
],
255+
'minLevelOverride' => '',
202256
'expectedClass' => SyslogHandler::class,
257+
'expectedLevel' => Logger::NOTICE,
203258
],
204259
[
205260
'handler' => HandlerFactory::HANDLER_SYSLOG_UDP,
@@ -212,8 +267,10 @@ public function createDataProvider()
212267
['min_level', LogConfig::LEVEL_NOTICE, LogConfig::LEVEL_NOTICE],
213268
['min_level', LogConfig::LEVEL_INFO, LogConfig::LEVEL_INFO],
214269
],
270+
'minLevelOverride' => '',
215271
'expectedClass' => SyslogUdpHandler::class,
216-
]
272+
'expectedLevel' => Logger::NOTICE,
273+
],
217274
];
218275
}
219276
}

src/Test/Unit/App/Logger/LevelResolverTest.php

-25
Original file line numberDiff line numberDiff line change
@@ -72,29 +72,4 @@ public function resolveDataProvider(): array
7272
['level' => 'invalid', Logger::NOTICE],
7373
];
7474
}
75-
76-
/**
77-
* @param string $level
78-
* @param int $expectedResult
79-
* @dataProvider resolveDataProvider
80-
* @dataProvider resolveOverrideDataProvider
81-
*/
82-
public function testResolveOverride(string $level, int $expectedResult)
83-
{
84-
$this->environmentMock
85-
->method('getMinLoggingLevel')
86-
->willReturn($level);
87-
88-
$this->assertSame($expectedResult, $this->levelResolver->resolve('some level'));
89-
}
90-
91-
/**
92-
* @return array
93-
*/
94-
public function resolveOverrideDataProvider(): array
95-
{
96-
return [
97-
['level' => '', Logger::NOTICE],
98-
];
99-
}
10075
}

src/Test/Unit/Config/SchemaTest.php

+1
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ public function testGetDefaultsForGlobalSection()
9494
StageConfigInterface::VAR_SKIP_HTML_MINIFICATION => false,
9595
StageConfigInterface::VAR_DEPLOYED_MAGENTO_VERSION_FROM_GIT => false,
9696
StageConfigInterface::VAR_DEPLOY_FROM_GIT_OPTIONS => [],
97+
StageConfigInterface::VAR_MIN_LOGGING_LEVEL => '',
9798
],
9899
$this->schema->getDefaults(StageConfigInterface::STAGE_GLOBAL)
99100
);

tests/unit/code-coverage.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* @author Marco Pivetta
44
* @link https://ocramius.github.io/blog/automated-code-coverage-check-for-github-pull-requests-with-travis/
55
*/
6-
const MIN_COVERAGE = 90;
6+
const MIN_COVERAGE = 91;
77

88
$inputFile = $argv[1];
99
$percentage = min(100, max(0, MIN_COVERAGE));

0 commit comments

Comments
 (0)