У меня проблема с моим проектом, я хочу использовать Monolog для записи логов и не могу этого сделать.
Итак, я создал сервис:
services:
my_logger:
class: Monolog\Logger
arguments: [Debug]
calls:
- [pushHandler, [@my_log_handler]]
my_log_handler:
class: Monolog\Handler\StreamHandler
arguments: [/home/vagrant/Workspace/symfony/app/logs/test.log, 100]
Мой контроллер:
$em = $this->getDoctrine()->getManager();
$categories = $em->getRepository('EnsJobeetBundle:Category')->getWithJobs();
Если я напишу:
$logger = $this->get('my_logger');
$logger->info('Test log');
Логи вставляются в test.log
Если я напишу:
$logger = $this->get('my_logger');
$logger->info(print_r($categories,true));
Логи не пишут. Я получаю ошибку 500.
Пожалуйста, помогите мне. Спасибо заранее !!!
Ошибки:
2015/03/05 12:58:48 [error] 4698#0: *76 FastCGI sent in stderr: "PHP message: PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 532676608 bytes)PHP message: PHP 8. print_r() /home/vagrant/Workspace/symfony/src/Ens /JobeetBundle/Controller/JobController.php:34" while reading response header from upstream, client: 10.0.2.2, server: symfony.md, request: "GET
/job/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "symfony.dev:8000"
Вам не хватает памяти, пытаясь обработать массив. Это может быть по многим причинам, может быть, он слишком большой, может иметь рекурсивные аспекты и т. Д.
Хорошая хитрость при работе с этим — просто напечатать ключи. Вы увидите меньше данных, но у вас будет гораздо меньше шансов превзойти ограничения памяти. Когда вы посмотрите на свой массив, вы сможете распечатать его отдельные части после того, как посмотрите на ключи. Попробуй это:
$logger = $this->get('my_logger');
$logger->info(print_r(array_keys($categories),true));
Другой вариант, если вам действительно нужно увидеть весь массив, это увеличить ограничения памяти в php.ini. Посмотрите на строку, как это, чтобы изменить их:
memory_limit = 128MB
Других решений пока нет …