独白数组日志TypeError
Monolog Array log TypeError
我在许多 PHP 项目中成功地使用了 Monolog,并且我经常使用 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 异常并跳过该日志
- 还有其他想法吗?
Monolog 是一个常见的 PHP 日志库,它实现了 PSR-3 LoggerInterface. If you take a look at that definition of how the debug()
method should behave you will see that the second argument ($context
) must be an array。这就是您收到类型错误的原因。 Monolog 不可能让您将非数组类型传递给此方法,因为它是由接口决定的。
public function debug($message, array $context = array());
我认为在你目前建议的选项中,最好的是将你的上下文变量转换为数组(就像你的例子一样)。
我在许多 PHP 项目中成功地使用了 Monolog,并且我经常使用 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 异常并跳过该日志
- 还有其他想法吗?
Monolog 是一个常见的 PHP 日志库,它实现了 PSR-3 LoggerInterface. If you take a look at that definition of how the debug()
method should behave you will see that the second argument ($context
) must be an array。这就是您收到类型错误的原因。 Monolog 不可能让您将非数组类型传递给此方法,因为它是由接口决定的。
public function debug($message, array $context = array());
我认为在你目前建议的选项中,最好的是将你的上下文变量转换为数组(就像你的例子一样)。