Skip to content

Commit 345823b

Browse files
authored
Merge pull request #2738 from magento-thunder/MAGETWO-92877
Fixed issues: - MAGETWO-92877: Write Core Application Logs to Syslog
2 parents 70c5c51 + ba6af44 commit 345823b

File tree

6 files changed

+204
-0
lines changed

6 files changed

+204
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Developer\Model\Logger\Handler;
9+
10+
use Magento\Framework\App\Config\ScopeConfigInterface;
11+
use Magento\Framework\App\DeploymentConfig;
12+
13+
/**
14+
* Enable/disable syslog logging based on the store config setting.
15+
*/
16+
class Syslog extends \Magento\Framework\Logger\Handler\Syslog
17+
{
18+
public const CONFIG_PATH = 'dev/syslog/syslog_logging';
19+
20+
/**
21+
* Scope config.
22+
*
23+
* @var ScopeConfigInterface
24+
*/
25+
private $scopeConfig;
26+
27+
/**
28+
* Deployment config.
29+
*
30+
* @var DeploymentConfig
31+
*/
32+
private $deploymentConfig;
33+
34+
/**
35+
* @param ScopeConfigInterface $scopeConfig Scope config
36+
* @param DeploymentConfig $deploymentConfig Deployment config
37+
* @param string $ident The string ident to be added to each message
38+
*/
39+
public function __construct(
40+
ScopeConfigInterface $scopeConfig,
41+
DeploymentConfig $deploymentConfig,
42+
string $ident
43+
) {
44+
parent::__construct($ident);
45+
46+
$this->scopeConfig = $scopeConfig;
47+
$this->deploymentConfig = $deploymentConfig;
48+
}
49+
50+
/**
51+
* @inheritdoc
52+
*/
53+
public function isHandling(array $record): bool
54+
{
55+
return parent::isHandling($record)
56+
&& $this->deploymentConfig->isAvailable()
57+
&& $this->scopeConfig->getValue(self::CONFIG_PATH);
58+
}
59+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Developer\Test\Unit\Model\Logger\Handler;
9+
10+
use Magento\Developer\Model\Logger\Handler\Syslog;
11+
use Magento\Framework\App\Config\ScopeConfigInterface;
12+
use Magento\Framework\App\DeploymentConfig;
13+
use Magento\Framework\Logger\Monolog;
14+
use PHPUnit\Framework\TestCase;
15+
use PHPUnit_Framework_MockObject_MockObject as Mock;
16+
17+
/**
18+
* @inheritdoc
19+
*/
20+
class SyslogTest extends TestCase
21+
{
22+
/**
23+
* @var Syslog
24+
*/
25+
private $model;
26+
27+
/**
28+
* @var ScopeConfigInterface|Mock
29+
*/
30+
private $scopeConfigMock;
31+
32+
/**
33+
* @var DeploymentConfig|Mock
34+
*/
35+
private $deploymentConfigMock;
36+
37+
protected function setUp()
38+
{
39+
$this->scopeConfigMock = $this->getMockForAbstractClass(ScopeConfigInterface::class);
40+
$this->deploymentConfigMock = $this->createMock(DeploymentConfig::class);
41+
42+
$this->model = new Syslog(
43+
$this->scopeConfigMock,
44+
$this->deploymentConfigMock,
45+
'Magento'
46+
);
47+
}
48+
49+
public function testIsHandling(): void
50+
{
51+
$record = [
52+
'level' => Monolog::DEBUG,
53+
];
54+
55+
$this->scopeConfigMock->expects($this->once())
56+
->method('getValue')
57+
->with(Syslog::CONFIG_PATH)
58+
->willReturn('1');
59+
$this->deploymentConfigMock->expects($this->once())
60+
->method('isAvailable')
61+
->willReturn(true);
62+
63+
$this->assertTrue(
64+
$this->model->isHandling($record)
65+
);
66+
}
67+
68+
public function testIsHandlingNotInstalled(): void
69+
{
70+
$record = [
71+
'level' => Monolog::DEBUG,
72+
];
73+
74+
$this->scopeConfigMock->expects($this->never())
75+
->method('getValue');
76+
$this->deploymentConfigMock->expects($this->once())
77+
->method('isAvailable')
78+
->willReturn(false);
79+
80+
$this->assertFalse(
81+
$this->model->isHandling($record)
82+
);
83+
}
84+
85+
public function testIsHandlingDisabled(): void
86+
{
87+
$record = [
88+
'level' => Monolog::DEBUG,
89+
];
90+
91+
$this->scopeConfigMock->expects($this->once())
92+
->method('getValue')
93+
->with(Syslog::CONFIG_PATH)
94+
->willReturn('0');
95+
$this->deploymentConfigMock->expects($this->once())
96+
->method('isAvailable')
97+
->willReturn(true);
98+
99+
$this->assertFalse(
100+
$this->model->isHandling($record)
101+
);
102+
}
103+
}

app/code/Magento/Developer/etc/adminhtml/system.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@
3232
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
3333
</field>
3434
</group>
35+
<group id="syslog" translate="label" type="text" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="1">
36+
<label>Syslog</label>
37+
<field id="syslog_logging" translate="label comment" type="select" sortOrder="10" showInDefault="1" showInWebsite="0" showInStore="0">
38+
<label>Log to Syslog</label>
39+
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
40+
</field>
41+
</group>
3542
</section>
3643
</system>
3744
</config>

app/code/Magento/Developer/etc/di.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
-->
88
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
99
<preference for="Magento\Framework\Logger\Handler\Debug" type="Magento\Developer\Model\Logger\Handler\Debug"/>
10+
<preference for="Magento\Framework\Logger\Handler\Syslog" type="Magento\Developer\Model\Logger\Handler\Syslog"/>
1011

1112
<type name="Magento\Framework\View\Result\Page">
1213
<arguments>

app/etc/di.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,9 +249,15 @@
249249
<argument name="handlers" xsi:type="array">
250250
<item name="system" xsi:type="object">Magento\Framework\Logger\Handler\System</item>
251251
<item name="debug" xsi:type="object">Magento\Framework\Logger\Handler\Debug</item>
252+
<item name="syslog" xsi:type="object">Magento\Framework\Logger\Handler\Syslog</item>
252253
</argument>
253254
</arguments>
254255
</type>
256+
<type name="Magento\Framework\Logger\Handler\Syslog">
257+
<arguments>
258+
<argument name="ident" xsi:type="string">Magento</argument>
259+
</arguments>
260+
</type>
255261
<type name="Magento\Framework\Model\Context">
256262
<arguments>
257263
<argument name="actionValidator" xsi:type="object">Magento\Framework\Model\ActionValidator\RemoveAction\Proxy</argument>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Framework\Logger\Handler;
9+
10+
use Monolog\Handler\SyslogHandler;
11+
use Monolog\Logger;
12+
13+
/**
14+
* @inheritdoc
15+
*/
16+
class Syslog extends SyslogHandler
17+
{
18+
private const FACILITY = LOG_USER;
19+
private const LEVEL = Logger::DEBUG;
20+
21+
/**
22+
* @param string $ident The string ident to be added to each message
23+
*/
24+
public function __construct(string $ident)
25+
{
26+
parent::__construct($ident, self::FACILITY, self::LEVEL);
27+
}
28+
}

0 commit comments

Comments
 (0)