O que é o MonologBundle?
O MonologBundle é um pacote do Symfony que permite a configuração e o uso da biblioteca Monolog no ambiente do Symfony. O Monolog é uma biblioteca popular de logging em PHP que permite a gravação de logs de forma estruturada em arquivos de texto, banco de dados ou outros canais configuráveis.
Por que usar o MonologBundle?
O MonologBundle é uma opção confiável para gravação de logs em projetos Symfony, pois oferece integração e configuração simplificada com a biblioteca Monolog. Através dele é possível definir canais específicos para diferentes tipos de logs, assim como habilitar e desabilitar a gravação de logs em diferentes ambientes e contextos. Além disso, o MonologBundle tem compatibilidade com diversas bibliotecas e ferramentas de terceiros como o Graylog e o Kibana.
Como instalar o MonologBundle?
Para instalar o MonologBundle no seu projeto Symfony é necessário incluir a biblioteca Monolog e o pacote MonologBundle nas dependências do seu projeto PHP. No arquivo composer.json
adicione a seguinte dependência:
"monolog/monolog": "^2.0",
Em seguida execute o comando:
$ composer require symfony/monolog-bundle
Como configurar o MonologBundle?
Para configurar o MonologBundle é necessário editar o arquivo de configuração config/packages/monolog.yaml
. Neste arquivo estão definidas as configurações padrões de logging para o ambiente de produção e de desenvolvimento do Symfony.
Por exemplo, para definir um canal de log específico para o seu projeto, é possível adicionar o seguinte código no arquivo de configuração:
monolog:
handlers:
your_custom_handler:
type: stream
path: "%kernel.logs_dir%/yourlog.log"
level: error
Como usar o MonologBundle?
Para usar o MonologBundle é necessário injetar a classe no construtor ou no método da classe que irá gerar os logs. Para criar um novo logger basta usar o serviço do MonologBundle chamando o método getLogger e passando o identificador do canal de log configurado.
use MonologBundleLogger;
$logger = new Logger('your_custom_handler');
$logger->debug('Mensagem de debug');
$logger->warning('Mensagem de warning');
Qual é a sintaxe para os níveis de logging no MonologBundle?
No MonologBundle os níveis de logging são definidos por constantes, sendo os mais comuns:
- DEBUG
- INFO
- NOTICE
- WARNING
- ERROR
- CRITICAL
- ALERT
- EMERGENCY
Por exemplo, para gerar um log de nível debug use:
$logger->debug('Mensagem de debug');
Posso usar diferentes canais de logging com o MonologBundle?
Sim, é possível criar diferentes canais de logging com o MonologBundle, para isso basta configurar os canais no arquivo config/packages/monolog.yaml
. Por exemplo, para definir um canal de log específico para o sistema de autenticação, adicione o seguinte código:
monolog:
handlers:
authentication:
type: stream
path: "%kernel.logs_dir%/auth.log"
level: info
Em seguida, ao utilizar o serviço do MonologBundle, defina o canal de log como parâmetro:
$logger = $this->get('monolog.logger.authentication');
Como gravar logs em diferentes canais?
Para gravar logs em diferentes canais é necessário definir o canal de log ao instanciar o novo logger.
$logger = $this->get('monolog.logger.your_custom_handler');
Em seguida, basta chamar o método do logger com a mensagem a ser registrada.
$logger->debug('Mensagem de debug');
Como desabilitar logs em um ambiente específico?
Para desabilitar o logging em um ambiente específico, é possível definir no arquivo de configuração config/packages/monolog.yaml
a configuração handlers
para o ambiente desejado. Por exemplo, para desabilitar o registro de logs no ambiente de teste:
monolog:
handlers:
main:
level: NOTICE
test:
type: null
Como reutilizar serviços de logging em outros serviços?
Para utilizar o serviço do MonologBundle em outras classes do Symfony, é necessário definir o serviço no arquivo de configuração services.yaml
. Por exemplo, para definir um serviço de logging do tipo MonologLogger no seu projeto:
services:
AppServiceLogger:
class: 'MonologLogger'
arguments:
- 'channel_name'
tags:
- { name: 'monolog.logger', channel: 'channel_name'}
Após definido o serviço, é possível utilizá-lo em outras classes do Symfony:
namespace AppService;
use MonologLogger;
class MinhaClasseService
{
protected $logger;
public function __construct(Logger $logger)
{
$this->logger = $logger;
$this->logger->debug('Mensagem de debug');
}
}
Qual é a melhor prática para gravação de logs no MonologBundle?
A melhor prática para gravação de logs no MonologBundle é definir canais de log específicos para diferentes áreas do seu projeto, assim como definir níveis de log apropriados para cada canal. Além disso, é recomendado logar somente as informações relevantes, evitando sobrecarregar os arquivos de log com informações desnecessárias.