Função PHP closelog(): O que é e como usar
Saiba como usar a função closelog() do PHP para encerrar a conexão com o logger do sistema (syslog) após concluir o registro de mensagens.
A função closelog() encerra a conexão que o PHP mantém aberta com o logger do sistema (syslog). Você abre essa conexão com openlog(), escreve nela com syslog(), e closelog() é a chamada correspondente que a encerra. Esta página aborda o que ela faz, sua assinatura e valor de retorno, quando você realmente precisa dela e como ela se encaixa em um fluxo típico de registro.
Sintaxe
closelog(): trueA função não aceita nenhum argumento. A partir do PHP 8.0, ela sempre retorna true; no PHP 7 e versões anteriores, o tipo de retorno declarado era bool. Raramente é necessário verificar o resultado.
O que closelog() faz
closelog() fecha o descritor que o PHP abriu para o logger do sistema e libera os recursos associados a essa conexão. Alguns detalhes importantes:
- Chamar
closelog()é opcional. O PHP fecha automaticamente a conexão com o syslog quando o script termina, portanto, para uma requisição web de curta duração, raramente é necessário chamá-la explicitamente. - Só é relevante após uma conexão existir. Chamá-la quando nenhuma conexão
openlog()/syslog()está aberta é inofensivo e simplesmente não faz nada útil. - Após
closelog(), a próxima chamada asyslog()reabre a conexão automaticamente, podendo reler oidente as opções que você passou em um novoopenlog().
Quando você realmente precisa dela
Como o PHP faz a limpeza ao final da requisição, os casos em que chamar closelog() importa são scripts de longa duração ou com múltiplos contextos:
- Workers de CLI e daemons de longa duração. Um processo que permanece ativo por horas deve liberar descritores de arquivo que não precisa mais, em vez de mantê-los abertos.
- Alternando identidade de log. Se você quiser que mensagens posteriores usem um
identou facility diferente, chamecloselog()e depoisopenlog()novamente com as novas configurações. - Organização em código compartilhado. Em uma biblioteca que abre sua própria conexão com o syslog, encerrá-la evita vazar essa conexão para o código do chamador.
Como usar closelog()
O uso consiste em uma única chamada sem argumentos. O padrão mais comum é abrir → escrever → fechar:
<?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 adiciona o ID do processo a cada entrada, LOG_PERROR também ecoa a mensagem para o erro padrão, e LOG_LOCAL0 seleciona uma facility de log. Consulte openlog() para a lista completa de opções e facilities.
Reutilizando a conexão com uma nova identidade
closelog() é a forma correta de trocar a tag (ident) usada para mensagens subsequentes:
<?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();Erros comuns
- Esperar que
closelog()limpe um buffer ou "salve" os logs. Cada chamada asyslog()já entrega a mensagem ao logger do sistema;closelog()apenas fecha a conexão. - Chamá-la após cada mensagem individual. Abrir e fechar repetidamente adiciona sobrecarga. Em uma requisição simples, abra uma vez, escreva quantas linhas quiser e feche no final (ou deixe o PHP fechar por você).
- Assumir que ela impede novos registros. Uma chamada posterior a
syslog()reabre a conexão transparentemente —closelog()não bloqueia o registro.
Funções relacionadas
Conclusão
closelog() encerra a conexão com o syslog aberta por openlog(), liberando seus recursos. Não aceita argumentos e retorna true. Para requisições web comuns, o PHP fecha a conexão automaticamente, portanto use closelog() principalmente em processos de longa duração ou quando precisar trocar a identidade de log no meio do script.