使用 Monolog 在 symfony 中写入日志

Write logs in symfony using 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。 请帮我。提前致谢! 错误:

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