1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
declare(strict_types=1); |
4
|
|
|
|
5
|
|
|
namespace WebServCo\Framework\Processors; |
6
|
|
|
|
7
|
|
|
use WebServCo\Framework\Helpers\ErrorMessageHelper; |
8
|
|
|
use WebServCo\Framework\Interfaces\LoggerInterface; |
9
|
|
|
|
10
|
|
|
/** |
11
|
|
|
* A helper class for logging exceptions to a standard error(CLI) log file. |
12
|
|
|
*/ |
13
|
|
|
class ErrorProcessor |
14
|
|
|
{ |
15
|
|
|
protected LoggerInterface $fileLogger; |
16
|
|
|
|
17
|
|
|
public function __construct() |
18
|
|
|
{ |
19
|
|
|
$this->fileLogger = new \WebServCo\Framework\Log\FileLogger( |
20
|
|
|
\WebServCo\Framework\Helpers\PhpHelper::isCli() ? 'errorCLI' : 'error', |
21
|
|
|
\WebServCo\Framework\Environment\Config::string('APP_PATH_LOG'), |
22
|
|
|
); |
23
|
|
|
} |
24
|
|
|
|
25
|
|
|
public function logException(\Throwable $exception): void |
26
|
|
|
{ |
27
|
|
|
$message = ErrorMessageHelper::format($exception); |
28
|
|
|
$this->fileLogger->error($message, ['message' => $message, 'trace' => $exception->getTrace()]); |
29
|
|
|
$previous = $exception->getPrevious(); |
30
|
|
|
if (!$previous instanceof \Throwable) { |
|
|
|
|
31
|
|
|
return; |
32
|
|
|
} |
33
|
|
|
do { |
34
|
|
|
$message = ErrorMessageHelper::format($previous); |
35
|
|
|
$this->fileLogger->error($message, ['message' => $message, 'trace' => $previous->getTrace()]); |
36
|
|
|
// phpcs:ignore SlevomatCodingStandard.ControlStructures.AssignmentInCondition.AssignmentInCondition |
37
|
|
|
} while ($previous = $previous->getPrevious()); |
38
|
|
|
} |
39
|
|
|
|
40
|
|
|
public function logRequest(\WebServCo\Framework\Interfaces\RequestInterface $requestInterface): bool |
41
|
|
|
{ |
42
|
|
|
// \Psr\Log\LoggerInterface requires $context to be an array |
43
|
|
|
$this->fileLogger->debug( |
44
|
|
|
'RequestInterface debug', |
45
|
|
|
[ |
46
|
|
|
'args' => $requestInterface->getArgs(), |
47
|
|
|
'body' => $requestInterface->getBody(), |
48
|
|
|
'contentType' => $requestInterface->getContentType(), |
49
|
|
|
'data' => $requestInterface->getData(), |
50
|
|
|
'method' => $requestInterface->getMethod(), |
51
|
|
|
'query' => $requestInterface->getQuery(), |
52
|
|
|
'remoteAddress' => $requestInterface->getRemoteAddress(), |
53
|
|
|
'url' => $requestInterface->getUrl(), |
54
|
|
|
'userAgent' => $requestInterface->getUserAgent(), |
55
|
|
|
], |
56
|
|
|
); |
57
|
|
|
return true; |
58
|
|
|
} |
59
|
|
|
} |
60
|
|
|
|