W3docs

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(): true

La 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 a syslog() reabre la conexión automáticamente, opcionalmente releyendo el ident y las opciones que pasaste a un nuevo openlog().

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 ident o una instalación diferente, llama a closelog() y luego a openlog() 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 a syslog() 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.

Práctica

Práctica
¿Cuál es el propósito de la función closelog() en PHP?
¿Cuál es el propósito de la función closelog() en PHP?
Was this page helpful?