# PHP log cuando usamos PHP-FPM con host virtuales

# Introducción
Uno de esos tips que está infravalorado. Podremos ver, decenas de páginas, y cientos de respuestas, en las que todos hablan de cómo configurar el log, de si el path es incorrecto, o de si estas en linux o en windows.
Al final el tema está en otro lugar, pues muchos de ellos, contestan si ni siquiera saber qué es PHP-FPM o cuando menos, sin verificar los que dicen que hace lo que escriben.

## Problema

En una instalación estándar de PHP-FPM en sistemas Linux, es posible que los errores de PHP no se registren correctamente en los logs de los dominios virtuales. Esto dificulta enormemente la depuración de problemas, ya que los mensajes de error críticos pueden perderse o no quedar registrados en los archivos de log esperados.

## Causa

Por defecto, PHP-FPM captura la salida estándar y de error de los workers (procesos de trabajo), pero no la redirige automáticamente a los logs. La directiva `catch_workers_output` está configurada como `no` en la configuración predeterminada, no existir o están simplemente comentada, lo que impide que los errores generados por los scripts PHP se registren adecuadamente.

## Solución

Para resolver este problema, es necesario modificar el archivo de configuración del pool de PHP-FPM:

1. Abrir el archivo de configuración del pool (normalmente ubicado en `/etc/php/X.X/fpm/pool.d/www.conf`, donde X.X es la versión de PHP, por ejemplo 7.4, 8.0, 8.1, etc.)

2. Buscar la directiva `catch_workers_output` 

3. Cambiar su valor de `no` a `yes`:
   ```
   catch_workers_output = yes
   ```

4. Guardar el archivo y reiniciar el servicio PHP-FPM:
   ```bash
   sudo systemctl restart php7.4-fpm.service  # Ajustar según la versión de PHP
   ```

## Explicación técnica

Cuando `catch_workers_output = yes` está activado, PHP-FPM captura la salida de los procesos worker y la redirige adecuadamente al sistema de logs. Esto asegura que:

- Los errores de PHP aparezcan en los logs específicos del dominio virtual
- Los mensajes críticos no se pierdan
- Sea más fácil identificar y solucionar problemas en aplicaciones PHP

## Consideraciones adicionales

En versiones más recientes de PHP-FPM (7.3+), se recomienda usar las siguientes directivas en lugar de `catch_workers_output`:

```
php_admin_flag[log_errors] = on
php_admin_value[error_log] = /ruta/a/error.log
```

Estas opciones ofrecen un mejor rendimiento y mayor control sobre el destino de los logs.

## Importancia

Configurar correctamente los logs de error es un paso crucial para:

- Facilitar la depuración de aplicaciones
- Detectar problemas de seguridad
- Monitorizar el rendimiento del servidor
- Cumplir con buenas prácticas de administración de sistemas

Sin esta configuración, podrías estar operando tus aplicaciones PHP "a ciegas", sin visibilidad sobre los errores que ocurren.


## Otros enlaces
- [directive 'catch_workers_output = yes' don't work as I want](https://serverfault.com/questions/936409/directive-catch-workers-output-yes-dont-work-as-i-want)
- [PHP-FPM doesn't write to error log](https://stackoverflow.com/questions/8677493/php-fpm-doesnt-write-to-error-log)


## Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos.  También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de [Castris](https://castris.com)

Si necesitas soporte profesional puedes contratar con Castris [soporte profesional](https://intranet.castris.com/cart.php?gid=18).