Монолог Array log TypeError - PullRequest
       8

Монолог Array log TypeError

0 голосов
/ 01 октября 2018

Я успешно использую Monolog во многих PHP-проектах и ​​часто использую второй аргумент для Monolog\\Logger для регистрации массивов:

$a = array("lemon", "banana", "apple");
$log->debug("Array: ", $a);

[2018-10-01 10:43:33] /5bb1fa556588f/62309.DEBUG: Array:  ["lemon","banana","apple"] {"file":"/path/to/file.php","line":4,"class":null,"function":"myfunc"}

Проблема возникает, когда $ a не массив, но по некоторым причинамэто логическое значение или что-то еще.В этой ситуации у вас есть больше причин для правильной регистрации, но когда это происходит, Monolog генерирует исключение TypeError, и сценарии завершаются после него:

$a = false;
$log->debug("Array: ", $a);

[2018-10-01 10:45:26] /5bb1fac59dc3e/62693.ERROR: Uncaught Exception TypeError: "Argument 2 passed to Monolog\Logger::debug() must be of the type array, boolean given, called in /path/to/file.php on line 4" at /path/to/project/vendor/monolog/monolog/src/Monolog/Logger.php line 530 {"exception":"[object] (TypeError(code: 0): Argument 2 passed to Monolog\\Logger::debug() must be of the type array, boolean given, called in /path/to/file.php on line 4 at /path/to/project/vendor/monolog/monolog/src/Monolog/Logger.php:530)"} {"file":null,"line":null,"class":null,"function":null}

Это происходит потому, что Monolog не автоматически приводит данную переменную к массиву..

Я не думаю, что это неправильно, но я хочу понять, как лучше решить эту проблему:

  • приведите второй аргумент к массиву: $log->debug("Array: ", (array)$a);
  • написать пользовательскую функцию, которая переносит вызов Monolog и приводит второй аргумент к массиву
  • , перехватывает исключение TypeError и пропускает этот журнал
  • . Любая другая идея?

1 Ответ

0 голосов
/ 01 октября 2018

Monolog - это распространенная библиотека журналирования PHP, которая реализует интерфейс PSR-3 LoggerInterface.Если вы посмотрите на это определение того, как должен вести себя метод debug(), вы увидите, что второй аргумент ($context) должен быть массивом .Вот почему вы получаете ошибку типа.Monolog не может позволить вам передать тип, не являющийся массивом, этому методу, так как он продиктован интерфейсом.

public function debug($message, array $context = array());

Я думаю, что из предложенных вами вариантов лучше всегодля приведения вашего контекста var в виде массива (как в вашем примере).

...