Symfony 1.4 dev logging не работает - PullRequest
5 голосов
/ 17 ноября 2011

У меня проблемы с получением журналов среды разработки для работы в Symfony 1.4.8. Между тем, логи в среде prod отлично работают с теми же настройками. Я не уверен, что не так с моей средой разработки.

Идея состоит в том, чтобы регистрировать сообщения в файлах Action и Template, используя следующий код:

    sfContext::getInstance()->getLogger()->err('Error Message Here!!!');

Однако сообщение об ошибке не появилось в файле frontend_dev.log в среде разработки. Чтобы включить ведение журнала, я изменил settings.yml и factories.yml; Я очистил кэш Symfony и логи. По какой-то странной причине symfony не генерировал новый файл frontend_dev.log в среде разработки после того, как я очистил журналы (удаляя старый). С другой стороны, в среде prod symfony сгенерировал пустой файл frontend_prod.log после выполнения команды clear logs. Я не уверен, что вызвало это, и если это как-то связано с регистрацией, не работающей в среде разработчика.

Вот настройки в моих settings.yml и factories.yml

settings.yml:

prod:
  .settings:
    no_script_name:         true
    logging_enabled:        true
    cache:                  false
    etag:                   false

dev:
  .settings:
    error_reporting:        <?php echo (E_ALL | E_STRICT)."\n" ?>
    logging_enabled:        true
    web_debug:              true
    cache:                  false
    no_script_name:         false
    etag:                   false

factories.yml:

prod:
#  logger:
#    class:   sfNoLogger
#    param:
#      level:   err
#      loggers: ~
  logger:
    class: sfAggregateLogger
    param:
      level: err
      loggers:
        sf_web_debug:
          class: sfWebDebugLogger
          param:
            level: debug
            condition:       %SF_WEB_DEBUG%
            xdebug_logging:  true
            web_debug_class: sfWebDebug
        sf_file_debug:
          class: sfFileLogger
          param:
            level: debug
            file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%.log

dev:
  mailer:
    param:
      delivery_strategy: none

  logger:
    class: sfAggregateLogger
    param:
      level: debug
      loggers:
        sf_web_debug:
          class: sfWebDebugLogger
          param:
            level: debug
            condition:       %SF_WEB_DEBUG%
            xdebug_logging:  true
            web_debug_class: sfWebDebug
        sf_file_debug:
          class: sfFileLogger
          param:
            level: debug
            file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%.log

Пожалуйста, дайте мне знать, что я делаю не так. Спасибо.

Обновление:

Я также пытался вызвать следующее в actions.class.php

$this->logMessage('ErrorMessageHere', 'err');

Тот же результат, я получил сообщение об ошибке в среде prod, но не в среде dev.

Я также пытался сбросить разрешение, набрав

    php symfony project:permission
    >> chmod 777 /var/www/ac2/web/uploads
    >> chmod 777 /var/www/ac2/cache
    >> chmod 777 /var/www/ac2/log
    >> chmod 777 /var/www/ac2/symfony
    >> chmod 777 /var/www/ac2/cache/frontend
    ......
    drwxrwxrwx 2 www-data www-data 4096 2011-11-16 11:51 log

Ошибка не возникла, и похоже, что папка журнала имеет необходимые разрешения. То же самое произошло, в среде разработчиков Symfony не создавал файл журнала frontend_dev.log, но в режиме prod после очистки журналов был создан пустой файл frontend_prod.log.

Это мой frontend_dev.php:

<?php

// this check prevents access to debug front controllers that are deployed by accident to production servers.
// feel free to remove this, extend it or make something more sophisticated.
if (!in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1', '192.168.1.55')))
{
  die('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}

require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');

$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'dev', true);
sfContext::createInstance($configuration)->dispatch();

Обновление 2:

Я только что нашел кое-что интересное с моими журналами в среде dev и prod.

В моем проекте symfony в приложениях было много модулей, я тестировал протоколирование сообщений в 2 модулях под Действиями и Шаблонами. Однако сегодня я заметил интересное событие, когда я тестировал в других модулях, среда разработки выдает сообщение об ошибке, а prod - нет. И если я вставлю журналы ошибок в 4-5 модулей, некоторые журналы появятся в frontend_dev.log, а другие появятся в frontend_prod.log. Я попытался очистить кэш и очистить журналы; тем не менее, те же модули будут вызывать ошибки в frontend_dev.log, а другие модули будут вызывать ошибки в frontend_prod.log

Например: я включил среду prod в /web/index.php и вставил следующие коды ошибок в 4 различных файла actions.class.php в 4 различных модуля

$this->logMessage('errortest1', 'err');
$this->logMessage('errortest2', 'err');
$this->logMessage('errortest3', 'err');
$this->logMessage('errortest4', 'err');

Если я включаю протоколирование ошибок dev и prod в среде prod. errortest1 и errortest2 появятся в frontend_dev.log, а errortest3 и errortest4 появятся в frontend_prod.log Если я только включаю журнал ошибок Prod в среде Prod. frontend_dev.log будет пустым, а errortest3 и errortest4 появятся в frontend_prod.log Если я только включаю протоколирование ошибок dev в среде dev. errortest1 и errortest2 появятся в frontend_dev.log, а frontend_prod.log будет пустым

Так что я не уверен, что происходит, мой проект Symfony был поврежден?

1 Ответ

0 голосов
/ 06 марта 2012

Может ли "\ n" в конце строки мешать вашему коду?

Попробуйте вместо этого оставить пробел между строками.

dev:
  .settings:
    error_reporting:        <?php echo (E_ALL | E_STRICT); ?>

    logging_enabled:        true
    web_debug:              true
...