viernes, 16 de abril de 2010

Web Debug Tool No Aparece!!

Declaro nuevamente mi condición de novato en Symfony. A pesar de ser un framework sumamente poderoso sus niveles de abstracción a veces lo hacen dificil de entender.

Aunque no entiendo algunos de los comportamienntos de Symfony trato de bloggear los "work arounds" mientras investigo las causas reales.

Recientemente el Web Debug Tool desaparecio de mi fronted_dev.php. Primero verifique que en apps/frontend/config/settings.yml la variable web_debug estuviese en true para el ambiente de desarrollo (dev). El archivo debería verse asi:
....
dev:
.settings:
error_reporting: <?php echo (E_ALL E_STRICT)."\n" ?>
web_debug: true
cache: false
no_script_name: false
etag: false
....

Luego recordé que tratando de filtrar los logs de Symfony edite el apps/frontend/config/factories.yml en el ambiente de desarrollo y agregue los que se muestra abajo en rojo:
....
dev:
logger:
class: sfFileLogger
param:
level: err
loggers: ~
file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%.log

mailer:
param:
delivery_strategy: none
....

Aparentemente esta cambio impacta la visualización del Web Debug Tool para solucionarlo comente el codigo que agregue e inmediatamente aparecio la herramienta.

sábado, 10 de abril de 2010

Logging en Symfony a Logs Externos

Uno de los problemas con los logs de de Symfony es que por defecto se llenan mucho y no he encontrado una maner rápida y práctica de filtrar lo que se escribe.
La forma apropiada es cambiar los filtros en settings.yml, pero no encuentro aún como filtrar por clase como se puede hacer en Log4J.
Mi solución rápida pero poco elegante fue crear un log nuevo para ver exclusivamente lo que me interesaba.
Como esta solución es para realizar un debugging en un problema que estoy teniendo no me he preocupado por uso de memoria ni escalabilidad.

$logger = new sfFileLogger(sfContext::getInstance()->getEventDispatcher(),
array('file'=> sfConfig::get("sf_log_dir").'/debug.log'));

$logger->log("{" . __CLASS__ . "." . __FUNCTION__ . "} Logging test", 2);

Con esto podemos loggear la clase y método desde donde se llama el logger.

Apr 10 12:16:19 symfony [crit] {sfValidatorImgToDB.doClean} Logging test

Mientras encuentro una forma más elegante de filtrar los logs esto me sirve.