W3docs

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

A 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 a syslog() reabre a conexão automaticamente, podendo reler o ident e as opções que você passou em um novo openlog().

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 ident ou facility diferente, chame closelog() e depois openlog() 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 a syslog() 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

  • openlog() — abre a conexão com o logger do sistema.
  • syslog() — gera uma mensagem de log do sistema.

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.

Prática

Prática
Qual é o propósito da função closelog() no PHP?
Qual é o propósito da função closelog() no PHP?
Was this page helpful?