mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-11-16 13:07:14 +01:00
79 lines
2.1 KiB
PHP
79 lines
2.1 KiB
PHP
|
<?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);
|
||
|
}
|
||
|
}
|