使用Monolog在symfony中写入日志

时间:2015-03-05 12:38:38

标签: php symfony logging symfony-2.3 monolog

我的项目有问题,我想使用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。 请帮我。 Thx提前!!! 错误:

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"

1 个答案:

答案 0 :(得分:2)

您尝试处理阵列时内存不足。这可能有很多原因,也许它太大了,也许它有递归方面等等。

使用它时的一个好方法是只打印键。您将看到更少的数据,但您将不太可能超过您的内存限制。当您查看阵列时,可以在查看按键后打印其中的特定部分。试试这个:

$logger = $this->get('my_logger');
$logger->info(print_r(array_keys($categories),true));

你的另一种选择,如果你真的需要看到整个数组,它会增加你在php.ini中的内存限制。寻找这样的一行来改变它们:

memory_limit = 128MB