Se uma exceção não for gravada no arquivo exception.log com o modelo de exceção como contexto, ela não será reconhecida e analisada corretamente no New Relic ou em outro armazenamento de log compatível com monólogo PSR-3. Registrar somente uma parte da exceção (ou registrá-la no arquivo errado) gera bugs na produção quando as exceções são ignoradas.
Manuseio de exceção correto
A lista de verificação a seguir fornece exemplos para demonstrar o manuseio correto de exceções.
Gravar no log de exceções
Grave no log de exceções usando o seguinte padrão, independentemente de outras ações, a menos que haja um motivo convincente para não fazê-lo.
Esta abordagem salva automaticamente o $e->getMessage na mensagem de log e o objeto $e no contexto, seguindo o padrão de contexto PSR-3. Isso é feito em \Magento\Framework\Logger\Monolog::addRecord.
Sinais mudos
Silencie sinais ao não registrar exceções que fazem parte do fluxo de operações pretendido. Nenhuma ação de acompanhamento é necessária quando a exceção é encontrada, portanto, ela não precisa ser registrada e analisada quando ocorrer. Adicione um comentário indicando o motivo para silenciar sinais e que é intencional. Combinar com phpcs:ignore.
Como prática recomendada, o registro em log sempre vem primeiro no código para evitar casos em que outra exceção ou erro fatal é lançado antes da gravação no log.
Os exemplos a seguir demonstram o tratamento incorreto de exceções.
Lógica
antes de fazer logon
A lógica antes do registro em log pode levar a outra exceção ou erro fatal, que impede que a exceção seja registrada e deve ser substituída por exemplo correto.
Essa abordagem introduz quebras de linha na mensagem, que não é compatível com o PSR-3. A exceção, incluindo o rastreamento de pilha, deve fazer parte do contexto da mensagem para garantir que ela seja salva corretamente com a mensagem no New Relic ou em outro armazenamento de log compatível com monólogo PSR-3.
A exceção foi rebaixada para um erro, que não permite que um objeto seja passado, mas apenas uma cadeia de caracteres, portanto o getMessage(). Isso faz com que o rastreamento seja perdido e deve ser substituído pelos exemplos corretos mostrados em Gravar no log de exceções ou Baixar exceções.
Em vez de passar o objeto $e, apenas $e->getMessage() é passado. Isso faz com que o rastreamento seja perdido e deve ser substituído pelos exemplos corretos mostrados Gravar no log de exceções ou Baixar exceções.
A omissão da linha phpcs:ignore aciona um aviso no PHPCS e não deve passar seu CI. Este deve ser substituído pelo exemplo correto mostrado em Sinais mudos.