Adding Logger Tests

This commit is contained in:
Philipp Holzer 2019-03-04 23:49:37 +01:00 committed by Hypolite Petovan
parent aee348fa02
commit f63956851b
3 changed files with 38 additions and 3 deletions

View file

@ -66,6 +66,12 @@ class SyslogLogger extends AbstractLogger
*/ */
private $logLevel; private $logLevel;
/**
* A error message of the current operation
* @var string
*/
private $errorMessage;
/** /**
* {@inheritdoc} * {@inheritdoc}
* @param string $level The minimum loglevel at which this logger will be triggered * @param string $level The minimum loglevel at which this logger will be triggered
@ -141,8 +147,12 @@ class SyslogLogger extends AbstractLogger
*/ */
private function write($priority, $message) private function write($priority, $message)
{ {
if (!openlog(self::IDENT, $this->logOpts, $this->logFacility)) { set_error_handler([$this, 'customErrorHandler']);
throw new InternalServerErrorException('Can\'t open syslog for ident "' . $this->channel . '" and facility "' . $this->logFacility . '""'); $opened = openlog(self::IDENT, $this->logOpts, $this->logFacility);
restore_error_handler();
if (!$opened) {
throw new \UnexpectedValueException(sprintf('Can\'t open syslog for ident "%s" and facility "%s": ' . $this->errorMessage, $this->channel, $this->logFacility));
} }
$this->syslogWrapper($priority, $message); $this->syslogWrapper($priority, $message);
@ -172,6 +182,11 @@ class SyslogLogger extends AbstractLogger
return $logMessage; return $logMessage;
} }
private function customErrorHandler($code, $msg)
{
$this->errorMessage = preg_replace('{^(fopen|mkdir)\(.*?\): }', '', $msg);
}
/** /**
* A syslog wrapper to make syslog functionality testable * A syslog wrapper to make syslog functionality testable
* *
@ -180,6 +195,12 @@ class SyslogLogger extends AbstractLogger
*/ */
protected function syslogWrapper($level, $entry) protected function syslogWrapper($level, $entry)
{ {
syslog($level, $entry); set_error_handler([$this, 'customErrorHandler']);
$written = syslog($level, $entry);
restore_error_handler();
if (!$written) {
throw new \UnexpectedValueException(sprintf('Can\'t write into syslog for ident "%s" and facility "%s": ' . $this->errorMessage, $this->channel, $this->logFacility));
}
} }
} }

View file

@ -59,4 +59,15 @@ class SyslogLoggerTest extends AbstractLoggerTest
$logger->log('NOPE', 'a test'); $logger->log('NOPE', 'a test');
} }
/**
* Test when the logfacility is wrong (string)
* @expectedException \UnexpectedValueException
* @expectedExceptionMessageRegExp /Can\'t open syslog for ident ".*" and facility ".*": .* /
*/
public function testServerException()
{
$logger = new SyslogLoggerWrapper('test', $this->introspection, LogLevel::DEBUG, null, 'a string');
$logger->emergency('not working');
}
} }

View file

@ -6,6 +6,9 @@ use Friendica\Util\Introspection;
use Friendica\Util\Logger\SyslogLogger; use Friendica\Util\Logger\SyslogLogger;
use Psr\Log\LogLevel; use Psr\Log\LogLevel;
/**
* Wraps the SyslogLogger for replacing the syslog call with a string field.
*/
class SyslogLoggerWrapper extends SyslogLogger class SyslogLoggerWrapper extends SyslogLogger
{ {
private $content; private $content;