diff --git a/core/modules/syslog/src/Logger/SysLog.php b/core/modules/syslog/src/Logger/SysLog.php index c2b73de..24250e8 100644 --- a/core/modules/syslog/src/Logger/SysLog.php +++ b/core/modules/syslog/src/Logger/SysLog.php @@ -85,6 +85,18 @@ public function log($level, $message, array $context = []) { '!message' => strip_tags($message), ]); + $this->syslogWrapper($level, $entry); + } + + /** + * A syslog wrapper to make syslog functionality testable. + * + * @param int $level + * The syslog priority. + * @param string $entry + * The message to send to syslog function. + */ + protected function syslogWrapper($level, $entry) { syslog($level, $entry); } diff --git a/core/modules/syslog/tests/modules/syslog_test/src/Logger/SysLogTest.php b/core/modules/syslog/tests/modules/syslog_test/src/Logger/SysLogTest.php new file mode 100644 index 0000000..c7abeb0 --- /dev/null +++ b/core/modules/syslog/tests/modules/syslog_test/src/Logger/SysLogTest.php @@ -0,0 +1,21 @@ +realpath('public://syslog.log'); + error_log($entry . PHP_EOL, 3, $log_path); + } + +} diff --git a/core/modules/syslog/tests/modules/syslog_test/syslog_test.info.yml b/core/modules/syslog/tests/modules/syslog_test/syslog_test.info.yml new file mode 100644 index 0000000..9a0bec7 --- /dev/null +++ b/core/modules/syslog/tests/modules/syslog_test/syslog_test.info.yml @@ -0,0 +1,8 @@ +name: 'Syslog test' +type: module +description: 'Provides a test logger for syslog module.' +package: Testing +version: VERSION +core: 8.x +dependencies: + - syslog diff --git a/core/modules/syslog/tests/modules/syslog_test/syslog_test.services.yml b/core/modules/syslog/tests/modules/syslog_test/syslog_test.services.yml new file mode 100644 index 0000000..120387b --- /dev/null +++ b/core/modules/syslog/tests/modules/syslog_test/syslog_test.services.yml @@ -0,0 +1,7 @@ +services: + logger.syslog_test: + parent: logger.syslog + class: Drupal\syslog_test\Logger\SysLogTest + arguments: ['@config.factory', '@logger.log_message_parser'] + tags: + - { name: logger } diff --git a/core/modules/syslog/tests/src/Functional/SyslogTest.php b/core/modules/syslog/tests/src/Functional/SyslogTest.php index 11b577f..7753c89 100644 --- a/core/modules/syslog/tests/src/Functional/SyslogTest.php +++ b/core/modules/syslog/tests/src/Functional/SyslogTest.php @@ -16,7 +16,7 @@ class SyslogTest extends BrowserTestBase { * * @var array */ - public static $modules = ['syslog']; + public static $modules = ['syslog', 'syslog_test']; /** * Tests the syslog settings page. @@ -37,4 +37,54 @@ public function testSettings() { } } + /** + * Test the syslog writing functionality. + */ + public function testSyslogWriting() { + \Drupal::logger('my_module')->warning('My warning message.'); + $this->drupalGet('/page-not-found'); + + global $base_url; + + $log_filename = $this->container->get('file_system')->realpath('public://syslog.log'); + + $content = file_get_contents($log_filename); + $rows = explode(PHP_EOL, $content); + $this->assertTrue(count($rows) > 1); + + $first_log_found = $second_log_found = $third_log_found = FALSE; + foreach ($rows as $row) { + if (strpos($row, 'syslog_test module installed.') !== FALSE) { + $log_items = explode('|', $row); + $expected = [$base_url, 'system', 'syslog_test module installed.']; + foreach ($expected as $value) { + $this->assertContains($value, $log_items); + } + $first_log_found = TRUE; + } + + if (strpos($row, 'my_module') !== FALSE) { + $log_items = explode('|', $row); + $expected = [$base_url, 'my_module', 'My warning message.']; + foreach ($expected as $value) { + $this->assertContains($value, $log_items); + } + $second_log_found = TRUE; + } + + if (strpos($row, 'page not found') !== FALSE) { + $log_items = explode('|', $row); + $expected = [$base_url, $base_url . '/page-not-found']; + foreach ($expected as $value) { + $this->assertContains($value, $log_items); + } + $third_log_found = TRUE; + } + } + + $this->assertTrue($first_log_found); + $this->assertTrue($second_log_found); + $this->assertTrue($third_log_found); + } + }