W3docs

Funzione PHP closelog(): cos'è e come usarla

Scopri come usare closelog() in PHP per chiudere la connessione al logger di sistema dopo aver scritto messaggi di log con syslog.

La funzione closelog() chiude la connessione che PHP mantiene aperta con il logger di sistema (syslog). Si apre quella connessione con openlog(), si scrive con syslog(), e closelog() è la chiamata corrispondente che la termina. Questa pagina spiega cosa fa, la sua firma e il valore restituito, quando è effettivamente necessaria e come si inserisce in un tipico flusso di logging.

Sintassi

closelog(): true

La funzione non accetta argomenti. A partire da PHP 8.0 restituisce sempre true; in PHP 7 e versioni precedenti il tipo di ritorno dichiarato era bool. Raramente è necessario controllare il risultato.

Cosa fa closelog()

closelog() chiude il descrittore che PHP ha aperto verso il logger di sistema e rilascia le risorse associate a quella connessione. Alcuni dettagli utili:

  • Chiamare closelog() è opzionale. PHP chiude automaticamente la connessione syslog al termine dello script, quindi per una richiesta web di breve durata raramente è necessario chiamarla esplicitamente.
  • Ha senso solo dopo che esiste una connessione. Chiamarla quando non è aperta nessuna connessione openlog()/syslog() è innocua e non produce alcun effetto utile.
  • Dopo closelog(), la successiva chiamata a syslog() riapre automaticamente la connessione, rileggendo opzionalmente l'ident e le opzioni passate a un nuovo openlog().

Quando è effettivamente necessaria

Poiché PHP effettua la pulizia alla fine della richiesta, i casi in cui chiamare closelog() è importante riguardano script a lunga esecuzione o con contesti multipli:

  • Worker CLI e daemon a lunga esecuzione. Un processo che rimane attivo per ore dovrebbe rilasciare i descrittori di file che non utilizza più invece di tenerli aperti.
  • Cambio di identità di log. Se si vuole che i messaggi successivi usino un ident o una facility diversi, chiamare closelog() e poi openlog() di nuovo con le nuove impostazioni.
  • Pulizia nel codice condiviso. In una libreria che apre la propria connessione syslog, chiuderla evita che trapeli nel codice del chiamante.

Come usare closelog()

Usarla è semplicemente una singola chiamata senza argomenti. Il pattern realistico è apri → scrivi → chiudi:

<?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 aggiunge l'ID del processo a ogni voce, LOG_PERROR invia anche il messaggio all'errore standard, e LOG_LOCAL0 seleziona una facility di logging. Consulta openlog() per l'elenco completo delle opzioni e delle facility.

Riutilizzare la connessione con una nuova identità

closelog() è il modo corretto per cambiare il tag (ident) usato per i messaggi successivi:

<?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();

Errori comuni

  • Aspettarsi che closelog() svuoti un buffer o "salvi" i log. Ogni chiamata a syslog() consegna già il messaggio al logger di sistema; closelog() chiude solo la connessione.
  • Chiamarla dopo ogni singolo messaggio. Aprire e chiudere ripetutamente aggiunge overhead. In una semplice richiesta, apri una volta, scrivi tutte le righe che vuoi, e chiudi alla fine (oppure lascia che PHP la chiuda per te).
  • Presumere che blocchi ulteriori log. Una successiva chiamata a syslog() riapre la connessione in modo trasparente — closelog() non impedisce il logging.

Funzioni correlate

  • openlog() — apre la connessione al logger di sistema.
  • syslog() — genera un messaggio nel log di sistema.

Conclusione

closelog() chiude la connessione syslog aperta da openlog(), rilasciando le relative risorse. Non accetta argomenti e restituisce true. Per le normali richieste web PHP chiude la connessione automaticamente, quindi usa closelog() principalmente in processi a lunga esecuzione o quando è necessario cambiare identità di logging durante lo script.

Pratica

Pratica
Qual è lo scopo della funzione closelog() in PHP?
Qual è lo scopo della funzione closelog() in PHP?
Was this page helpful?