W3docs

Função PHP openlog(): Tudo o Que Você Precisa Saber

Aprenda como usar a função openlog() do PHP para abrir uma conexão com o logger do sistema, com parâmetros, flags e boas práticas explicados.

Como desenvolvedor PHP, pode ser necessário registrar mensagens do sistema para fins de depuração. A função openlog() é uma função embutida do PHP que abre uma conexão com o logger do sistema. Neste artigo, faremos uma análise detalhada da função openlog(), seus parâmetros e as melhores práticas para gerenciar a conexão com o logger.

O que é a Função openlog()?

A função openlog() estabelece uma conexão com o serviço de logging do sistema operacional, permitindo que sua aplicação PHP envie mensagens diretamente ao logger do sistema.

Nota: openlog() é uma função compatível com POSIX e não está disponível no Windows por padrão. Ela requer um ambiente semelhante ao Unix (Linux, macOS, etc.).

Como Usar a Função openlog()

Usar a função openlog() é simples. Aqui está a sintaxe da função:

A sintaxe PHP da Função openlog()

openlog($ident, $option, $facility);

A função recebe três parâmetros:

  • $ident: Uma string que será adicionada antes de cada mensagem. Normalmente é o nome da sua aplicação, o que facilita filtrar suas mensagens de um log compartilhado do sistema.
  • $option: Uma combinação bitwise de flags que controlam como o logging funciona.
  • $facility: Uma constante que informa ao sistema que tipo de programa está fazendo o log, para que o daemon do syslog possa rotear as mensagens para o arquivo correto.

openlog() retorna true em caso de sucesso (no PHP moderno, é tipado para retornar true). Chamá-la é opcional — se você chamar syslog() sem ela, o PHP abre uma conexão usando as configurações padrão — mas openlog() permite definir o prefixo de identidade e as opções antecipadamente.

Flags comuns de $option

FlagEfeito
LOG_PIDInclui o ID do processo (PID) em cada mensagem — útil para rastrear requisições concorrentes.
LOG_CONSEscreve no console do sistema se a mensagem não conseguir alcançar o logger do sistema.
LOG_PERRORTambém imprime a mensagem em stderr (conveniente durante o desenvolvimento).
LOG_NDELAYAbre a conexão imediatamente em vez de na primeira chamada a syslog().
LOG_ODELAYAdia a abertura da conexão até a primeira mensagem (o padrão).

Combine as flags com o operador OR bitwise (|), por exemplo, LOG_PID | LOG_PERROR.

Constantes comuns de $facility

FacilitySignificado
LOG_USERMensagens genéricas de nível de usuário (o padrão).
LOG_LOCAL0LOG_LOCAL7Oito slots reservados para suas próprias aplicações.
LOG_DAEMONMensagens de daemons do sistema.
LOG_MAILMensagens do subsistema de e-mail.

Escolher uma facility LOG_LOCAL* permite que um administrador de sistemas roteie os logs da sua aplicação para um arquivo dedicado em /etc/rsyslog.conf sem modificar os logs do sistema.

Aqui está um exemplo de como usar a função openlog() para abrir uma conexão com o logger do sistema:

Como Usar a Função openlog()?

<?php

if (function_exists('openlog')) {
    $ident = "myapp";
    $option = LOG_PID | LOG_PERROR;
    $facility = LOG_LOCAL0;

    openlog($ident, $option, $facility);

    // syslog() always returns true in modern PHP, so don't branch on its result
    syslog(LOG_INFO, "Application started successfully.");

    // Always close the logger when done
    closelog();
} else {
    echo "openlog() is not available on this system.";
}
?>

Neste exemplo, usamos a função openlog() para abrir uma conexão com o logger do sistema. Especificamos a string "myapp" como parâmetro $ident, que será adicionada antes de cada mensagem. Também especificamos o parâmetro $option para incluir o ID do processo em cada mensagem de log, além de enviar mensagens ao console do sistema em caso de erro. Por fim, especificamos o parâmetro $facility para definir a facility de logging como LOG_LOCAL0. O exemplo inclui uma verificação function_exists() para compatibilidade de SO e uma chamada closelog() para liberar os recursos adequadamente. Note que syslog() sempre retorna true no PHP moderno (8.0+), portanto não faz sentido ramificar com base no seu resultado. Para aplicações contemporâneas, considere error_log() ou Monolog. Para visualizar as mensagens registradas, execute journalctl -f (systemd) ou tail -f /var/log/syslog.

Boas Práticas: Fechar o Logger

Após terminar o logging, você deve sempre chamar closelog(). Essa função fecha a conexão com o logger do sistema e libera o descritor de arquivo associado. Não fechar o logger pode causar vazamentos de recursos, especialmente em scripts de longa execução ou aplicações CLI.

O fluxo de trabalho típico é um ciclo de três funções:

  1. openlog() — abre a conexão e define a identidade/opções.
  2. syslog() — envia uma ou mais mensagens com uma determinada prioridade (LOG_INFO, LOG_WARNING, LOG_ERR, …).
  3. closelog() — fecha a conexão.

Quando devo usar openlog() em vez de error_log()?

Use openlog()/syslog() quando quiser que as mensagens fluam para o logging centralizado do sistema operacional (syslog/journald) — por exemplo, para que possam ser enviadas para fora do host ou correlacionadas com outros serviços do sistema. Para erros comuns de aplicação escritos em um arquivo ou no próprio log do PHP, error_log() é mais simples e funciona em todas as plataformas, incluindo Windows. Aplicações maiores geralmente recorrem a uma biblioteca de logging como o Monolog, que pode ter como alvo o syslog e arquivos por meio de uma única API.

Conclusão

A função openlog() é uma ferramenta útil para registrar mensagens do sistema na sua aplicação web PHP. Ao compreender sua sintaxe, as limitações POSIX e a importância do closelog(), você pode integrar com segurança o logging do sistema em seus projetos. Esperamos que este artigo tenha sido informativo e útil para entender a função openlog() em PHP.

Prática

Prática
O que a função 'openlog()' faz no PHP?
O que a função 'openlog()' faz no PHP?
Was this page helpful?