1
+ <?php
2
+
3
+ namespace {{NamespaceName}}\App\Library;
4
+
5
+ use ErrorException;
6
+ use Exception;
7
+ use Fabs\Rest\Services\HttpStatusCodeHandler;
8
+ use Fabs\Serialize\Validation\ValidationException;
9
+ use Monolog\Formatter\LineFormatter;
10
+ use Monolog\Handler\StreamHandler;
11
+ use Monolog\Logger;
12
+
13
+ class ExceptionHandler
14
+ {
15
+ /**
16
+ * @param Exception $exception
17
+ */
18
+ public static function handle($exception)
19
+ {
20
+ try {
21
+ if ($exception instanceof ValidationException) {
22
+ $logger = self::getLogger('validation');
23
+ $log = sprintf(
24
+ "\n\nfile: %s:%s\nproperty: %s validation: %s \nstacktrace: %s \ninputs: %s\ncontext: %s\n\n",
25
+ $exception->getFile(),
26
+ (string)$exception->getLine(),
27
+ $exception->getPropertyName(),
28
+ $exception->getValidatorName(),
29
+ $exception->getTraceAsString(),
30
+ file_get_contents('php://input'),
31
+ json_encode($_SERVER)
32
+ );
33
+ $logger->error($log);
34
+ (new HttpStatusCodeHandler())->internalServerError();
35
+ } else {
36
+ if ($exception instanceof ErrorException) {
37
+ $logger = self::getLogger('error');
38
+ } else {
39
+ $logger = self::getLogger('exception');
40
+ }
41
+ $log = sprintf(
42
+ "\n\nfile: %s:%s\nmessage: %s \nstacktrace: %s \ninputs: %s\ncontext: %s\n\n",
43
+ $exception->getFile(),
44
+ (string)$exception->getLine(),
45
+ $exception->getMessage(),
46
+ $exception->getTraceAsString(),
47
+ file_get_contents('php://input'),
48
+ json_encode($_SERVER)
49
+ );
50
+ $logger->error($log);
51
+ (new HttpStatusCodeHandler())->internalServerError();
52
+ }
53
+ } catch (\Exception $exception) {
54
+ // do nothing
55
+ }
56
+ }
57
+ private static function getLogger($name)
58
+ {
59
+ $logger = new Logger($name);
60
+ $formatter = new LineFormatter("%datetime% > %level_name% > %message% %context% %extra%\n", "Y-m-d H:i:s", true);
61
+ $handler = new StreamHandler(BASE_PATH . '/logs/' . $name . '.log', Logger::ERROR);
62
+ $handler->setFormatter($formatter);
63
+ $logger->pushHandler($handler);
64
+ return $logger;
65
+ }
66
+ }
0 commit comments