0
4

SHARE

Como Implementar um Sistema de Logs Profissional em Plugins WordPress

Como Gerenciar Logs e Erros Internos em Plugins WordPress (Do Jeito Certo)

Aprenda a criar um sistema de gerenciamento de erros e logs para plugins WordPress, elevando a qualidade e profissionalismo dos seus projetos
Este post é a parte 16 de 16 da Série WordPress Extremo

Fala, pessoal! 👋
Aqui é o Asllan Maciel — e hoje vamos voltar ao tema Arquitetura e Engenharia de plugins e falar sobre algo essencial para qualquer plugin WordPress profissional: gerenciamento inteligente de erros e logs.

Precisamos avançar com a estruturação do nosso plugin, mas logo logo vamos voltar à criação de blocos em nível avançado!

Então… se você quer elevar o nível dos seus projetos, precisa abandonar o velho error_log() espalhado no meio do código. Hoje vamos estruturar um sistema de logs real, digno de plugin de mercado.

🚀 Bora aprender do jeito certo?


🚀 Por que ter um sistema de logs no plugin?

✅ Facilita a identificação de bugs sem depender de ambientes ao vivo.
✅ Permite rastrear falhas específicas, como problemas de integração de API ou erros em transações.
Profissionaliza seu plugin: quem lida bem com erros passa segurança.
Melhora o suporte ao cliente, reduzindo o tempo de análise de problemas.

🎯 Exemplo real:

Sem log:
Usuário: “O pagamento não funcionou!”
Você: “🤔… vou tentar reproduzir aqui.”

Com log:
Você abre o log e vê:
[2025-04-23 15:47:00] - Erro no pagamento: Código 403 - Permissão negada.

🔵 Resultado: Você soluciona rápido e transmite confiança!


🛠️ Estruturando o Gerenciador de Logs

Decidimos implementar uma classe de serviços — e não apenas um “Logger” — para manter o plugin modular, limpo e escalável.

Estrutura:

/src/Services/LogService.php

Código:

<?php

namespace WpArquiteturaExtrema\Services;

class LogService
{
    protected $log_file;

    public function __construct()
    {
        $upload_dir = wp_upload_dir();
        $this->log_file = $upload_dir['basedir'] . '/wp-arquitetura-extrema.log';
    }

    public function info($message)
    {
        $this->write_log('INFO', $message);
    }

    public function warning($message)
    {
        $this->write_log('WARNING', $message);
    }

    public function error($message)
    {
        $this->write_log('ERROR', $message);
    }

    protected function write_log($level, $message)
    {
        $datetime = date('Y-m-d H:i:s');
        $formatted = "[{$datetime}] {$level}: {$message}" . PHP_EOL;
        file_put_contents($this->log_file, $formatted, FILE_APPEND);
    }
}

🔌 Como Instanciamos o LogService?

Vamos garantir que o log esteja disponível em todo o plugin.
Pra isso, alteramos nosso Init para carregar o serviço de log centralmente.

Atualização no Init:

<?php

namespace WpArquiteturaExtrema\Hooks;

use WpArquiteturaExtrema\Services\HelloService;
use WpArquiteturaExtrema\Repositories\UserRepository;
use WpArquiteturaExtrema\Services\LogService;

class Init
{
    protected $logger;

    public function register()
    {
        $this->logger = new LogService();

        add_action('init', [$this, 'init_plugin']);
        add_action('init', [$this, 'register_blocks']);
    }

    public function init_plugin()
    {
        $repo = new UserRepository();
        $service = new HelloService($repo);
        $service->execute();

        // Exemplo de uso do logger
        $this->logger->info('Plugin inicializado com sucesso.');
    }

    public function register_blocks()
    {
        // Registro dos blocos conforme já estruturamos
    }
}

Agora, qualquer serviço que precisar de logs poderá usar essa instância de forma controlada! 🔥


🧠 Boas práticas para usar o Log

  • Não abuse: logue apenas eventos relevantes.
  • Proteja: nunca deixe logs expostos publicamente em produção.
  • Rotacione: dependendo do volume, implemente rotação (arquivar logs antigos).
  • Padronize mensagens: sempre claras e objetivas.

📌 Recapitulando

Hoje estruturamos:

✅ Um sistema de logs inteligente com níveis de informação (info, warning, error).
✅ Uma maneira centralizada de instanciar e usar o Logger.
✅ A integração limpa com nossa arquitetura já existente.

Se você quer seguir elevando o nível, fique ligado nos próximos dias! 🚀

Navegação<< Bloco de Posts com Filtro por Múltiplas Categorias

Não perca mais nenhuma atualização aqui!

Ative as Notificações!

Clique aqui e, em seguida, clique em Permitir na caixa que aparecerá na parte superior da janela, próximo à barra de endereços.

Torne-se um Assinante e Eleve seu Conhecimento do WordPress!

Acesso Exclusivo, Suporte Especializado e Muito Mais.

Se você está aproveitando nosso conteúdo gratuito, vai adorar os benefícios exclusivos que oferecemos aos nossos assinantes! Ao se tornar um assinante do WP24Horas, você terá acesso a:

Não perca a oportunidade de maximizar seu potencial no WordPress. Clique no botão abaixo para se tornar um assinante e leve suas habilidades ao próximo nível!

Não perca mais nenhuma atualização aqui!

Tabela de Conteúdo
PUBLICIDADE
Últimos Posts
Como Criar um Bloco WordPress com Filtro por Múltiplas Categorias

Bloco de Posts com Filtro por Múltiplas Categorias

Como Filtrar Posts por Categoria em um Bloco Gutenberg

Filtrando Posts por Categoria no Editor do Bloco

Como Criar um Bloco Dinâmico no WordPress com Renderização PHP

Bloco Dinâmico com Renderização no Servidor

Conectando Blocos Gutenberg à REST API

Conectando Blocos com a REST API do WordPress

Componentes Reutilizáveis e Campos Compostos no Gutenberg

Componentes Reutilizáveis e Atributos Compostos em Blocos Gutenberg

Adicionando Imagem Ícone e Classe CSS Personalizada em Bloco Gutenberg

Ícones, Imagens e Classes Personalizadas no Gutenberg

Você precisa estar logado para ver esta informação.

Torne-se um Assinante e Eleve seu Conhecimento do WordPress!

Acesso Exclusivo, Suporte Especializado e Muito Mais.

Se você está aproveitando nosso conteúdo gratuito, vai adorar os benefícios exclusivos que oferecemos aos nossos assinantes! 

Não perca a oportunidade de maximizar seu potencial no WordPress. Clique no botão abaixo para se tornar um assinante e leve suas habilidades ao próximo nível!