Función PHP closelog(): Qué es y cómo usarla
Aprende qué hace closelog() en PHP, cuándo llamarla y cómo encaja en el flujo típico de registro con openlog() y syslog().
La función closelog() cierra la conexión que PHP mantiene abierta con el registrador del sistema (syslog). Abres esa conexión con openlog(), escribes en ella con syslog(), y closelog() es la llamada que la cierra. Esta página explica qué hace, su firma y valor de retorno, cuándo realmente la necesitas y cómo encaja en un flujo de registro típico.
Sintaxis
closelog(): trueLa función no recibe ningún argumento. A partir de PHP 8.0 siempre devuelve true; en PHP 7 y versiones anteriores el tipo de retorno declarado era bool. Casi nunca necesitas comprobar el resultado.
Qué hace closelog()
closelog() cierra el descriptor que PHP abrió hacia el registrador del sistema y libera los recursos asociados a esa conexión. Algunos detalles a tener en cuenta:
- Llamar a
closelog()es opcional. PHP cierra automáticamente la conexión con syslog cuando el script termina, por lo que en una solicitud web de corta duración raramente necesitas llamarla explícitamente. - Solo tiene sentido después de que exista una conexión. Llamarla cuando no hay ninguna conexión
openlog()/syslog()abierta es inofensivo y simplemente no hace nada útil. - Después de
closelog(), la siguiente llamada asyslog()reabre la conexión automáticamente, opcionalmente releyendo elidenty las opciones que pasaste a un nuevoopenlog().
Cuándo realmente la necesitas
Como PHP limpia los recursos al final de la solicitud, los casos en que llamar a closelog() importa son scripts de larga duración o con múltiples contextos:
- Workers CLI de larga duración y demonios. Un proceso que permanece activo durante horas debería liberar los descriptores de archivo que ya no necesita en lugar de mantenerlos abiertos.
- Cambio de identidad de registro. Si quieres que los mensajes posteriores usen un
idento una instalación diferente, llama acloselog()y luego aopenlog()de nuevo con la nueva configuración. - Limpieza en código compartido. En una librería que abre su propia conexión syslog, cerrarla evita que dicha conexión se filtre al código del llamante.
Cómo usar closelog()
Usarla es simplemente una única llamada sin argumentos. El patrón habitual es abrir → escribir → cerrar:
<?php
// Open a connection, tagging each line with "myapp" and the process ID
openlog("myapp", LOG_PID | LOG_PERROR, LOG_LOCAL0);
// Write a message at the INFO priority level
syslog(LOG_INFO, "User login succeeded");
// Release the connection
closelog();LOG_PID añade el ID del proceso a cada entrada, LOG_PERROR también envía el mensaje al error estándar, y LOG_LOCAL0 selecciona una instalación de registro. Consulta openlog() para ver la lista completa de opciones e instalaciones.
Reutilizar la conexión con una nueva identidad
closelog() es la forma limpia de cambiar la etiqueta (ident) usada en los mensajes posteriores:
<?php
openlog("auth-service", LOG_PID, LOG_LOCAL0);
syslog(LOG_NOTICE, "Authentication attempt");
closelog();
// Later messages are tagged "billing-service" instead
openlog("billing-service", LOG_PID, LOG_LOCAL0);
syslog(LOG_NOTICE, "Invoice generated");
closelog();Errores comunes
- Esperar que
closelog()vacíe un búfer o "guarde" los registros. Cada llamada asyslog()ya entrega el mensaje al registrador del sistema;closelog()solo cierra la conexión. - Llamarla después de cada mensaje individual. Abrir y cerrar repetidamente añade sobrecarga. En una solicitud sencilla, abre una vez, escribe tantas líneas como necesites y cierra al final (o simplemente deja que PHP lo cierre por ti).
- Asumir que detiene el registro posterior. Una llamada posterior a
syslog()reabre la conexión de forma transparente —closelog()no bloquea el registro.
Funciones relacionadas
openlog()— abre la conexión con el registrador del sistema.syslog()— genera un mensaje de registro del sistema.
Conclusión
closelog() cierra la conexión syslog abierta por openlog(), liberando sus recursos. No recibe argumentos y devuelve true. Para solicitudes web ordinarias PHP cierra la conexión por ti, así que recurre a closelog() principalmente en procesos de larga duración o cuando necesitas cambiar la identidad de registro a mitad del script.