OpenXE/classes/Components/Logger/Handler/StreamLogHandler.php

79 lines
2.1 KiB
PHP
Raw Normal View History

2021-05-21 08:49:41 +02:00
<?php
declare(strict_types=1);
namespace Xentral\Components\Logger\Handler;
use Xentral\Components\Logger\Context\ContextInterface;
final class StreamLogHandler extends AbstractLogHandler
{
/** @var string FORMAT */
private const FORMAT = '%TIME% [%ORIGIN_TYPE%:%ORIGIN_DETAIL%] %CLASS%::%METHOD%(%LINE%)'
.' %LEVEL% %MESSAGE% %DUMP%';
/** @var string $stream */
private $logFile;
/**
* @param string $logFilePath
* @param string $level
*/
public function __construct(string $logFilePath, string $level)
{
$this->logFile = $logFilePath;
$this->setMinimumLevel($level);
}
/**
* @param string $level
* @param string $message
* @param ContextInterface $context
*
* @return void
*/
public function addLogEntry(string $level, string $message, ContextInterface $context): void
{
if (!$this->canHandle($level)) {
return;
}
$dump = '';
if ($context->hasDump() && !$context->hasException()) {
$dump = print_r($context->getDump(), true);
}
if ($context->hasException()) {
$dump = (string)$context->getException();
}
$entry = self::FORMAT;
$entry = preg_replace(
[
'/%TIME%/',
'/%LEVEL%/',
'/%MESSAGE%/',
'/%CLASS%/',
'/%METHOD%/',
'/%LINE%/',
'/%ORIGIN_TYPE%/',
'/%ORIGIN_DETAIL%/',
'/%DUMP%/',
],
[
$context->getTime()->format('Y-m-d H:i:s'),
strtoupper($level),
$message,
$context->getClass(),
$context->getFunction(),
$context->getLine(),
$context->getOriginType(),
$context->getOriginDetail(),
$dump
],
$entry
);
$entry .= "\r\n";
$stream = fopen($this->logFile, 'ab+');
fwrite($stream, $entry);
fclose($stream);
}
}