.. index:: single: Log; Enviar erros por e-mail Como configurar o Monolog para enviar erros por e-mail ====================================================== O Monolog_ pode ser configurado para enviar um e-mail quando ocorrer um erro na aplicação. A configuração para isto requer alguns manipuladores aninhados a fim de evitar o recebimento de muitos e-mails. Esta configuração parece complicada no início, mas cada manipulador é bastante simples quando é separado. .. configuration-block:: .. code-block:: yaml # app/config/config_prod.yml monolog: handlers: mail: type: fingers_crossed action_level: critical handler: buffered buffered: type: buffer handler: swift swift: type: swift_mailer from_email: error@example.com to_email: error@example.com subject: An Error Occurred! level: debug .. code-block:: xml .. code-block:: php // app/config/config_prod.php $container->loadFromExtension('monolog', array( 'handlers' => array( 'mail' => array( 'type' => 'fingers_crossed', 'action_level' => 'critical', 'handler' => 'buffered', ), 'buffered' => array( 'type' => 'buffer', 'handler' => 'swift', ), 'swift' => array( 'type' => 'swift_mailer', 'from_email' => 'error@example.com', 'to_email' => 'error@example.com', 'subject' => 'An Error Occurred!', 'level' => 'debug', ), ), )); O manipulador ``mail`` é um manipulador ``fingers_crossed``, significando que ele é acionado apenas quando o nível de ação, neste caso, ``critical`` é alcançado. Em seguida, ele faz log de tudo, incluindo mensagens abaixo do nível de ação. O nível ``critical`` só é acionado para erros HTTP de código 5xx. A definição ``handler`` significa que a saída é, então, transferida para o manipulador ``buffered``. .. tip:: Se você deseja que tanto erros de nível 400 quanto de nível 500 acionem um e-mail, defina o ``action_level`` para ``error`` ao invés de ``critical``. O manipulador ``buffered`` simplesmente mantém todas as mensagens para um pedido e em seguida, passa elas para o manipulador aninhado de uma só vez. Se você não usar este manipulador, então cada mensagem será enviada separadamente. Em seguida, é passado para o manipulador ``swift``. Este é o manipulador que efetivamente trata de enviar o erro para o e-mail. As configurações para isso são simples, os endereços de (to), para (from) e o assunto (subject). Você pode combinar esses manipuladores com outros manipuladores de modo que os erros ainda serão registrados no servidor, bem como enviados os e-mails: .. configuration-block:: .. code-block:: yaml # app/config/config_prod.yml monolog: handlers: main: type: fingers_crossed action_level: critical handler: grouped grouped: type: group members: [streamed, buffered] streamed: type: stream path: "%kernel.logs_dir%/%kernel.environment%.log" level: debug buffered: type: buffer handler: swift swift: type: swift_mailer from_email: error@example.com to_email: error@example.com subject: An Error Occurred! level: debug .. code-block:: xml .. code-block:: php // app/config/config_prod.php $container->loadFromExtension('monolog', array( 'handlers' => array( 'main' => array( 'type' => 'fingers_crossed', 'action_level' => 'critical', 'handler' => 'grouped', ), 'grouped' => array( 'type' => 'group', 'members' => array('streamed', 'buffered'), ), 'streamed' => array( 'type' => 'stream', 'path' => '%kernel.logs_dir%/%kernel.environment%.log', 'level' => 'debug', ), 'buffered' => array( 'type' => 'buffer', 'handler' => 'swift', ), 'swift' => array( 'type' => 'swift_mailer', 'from_email' => 'error@example.com', 'to_email' => 'error@example.com', 'subject' => 'An Error Occurred!', 'level' => 'debug', ), ), )); Isto usa o manipulador ``group`` para enviar as mensagens para os dois membros do grupo, os manipuladores ``buffered`` e ``stream``. As mensagens serão agora gravadas no arquivo de log e enviadas por e-mail. .. _Monolog: https://github.com/Seldaek/monolog