У меня проблемы с получением журналов среды разработки для работы в 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 был поврежден?