PHP MVCDOCUMENTAÇÃO
v2.0.0

Logs e e-mail

Logger estruturado e drivers reais do helper Mailer.

Logger

Framework\Support\Logger oferece debug, info, warning, error, critical, registro de requisição e setMinLevel(). Métodos aceitam mensagem e contexto array. Logs são gravados em storage/ e podem também aparecer no terminal conforme ambiente/configuração. Não inclua senha, tokens ou cabeçalhos de autorização no contexto.

Mailer

$mailer->send($to, $subject, $body, $altBody = '', $toName = '') retorna success e message, podendo incluir dev_body. Drivers: dev não envia e retorna o corpo para inspeção; log grava em storage/logs/mail.log; smtp envia via PHPMailer. Configuração em MAIL_DRIVER, MAIL_HOST, MAIL_PORT, MAIL_USERNAME, MAIL_PASSWORD, MAIL_ENCRYPTION e variáveis from.

O driver dev não cria URL de preview: o código devolve o conteúdo em dev_body e registra metadados. A base não inclui motor/diretório de templates de email. SMTP exige PHPMailer instalado via dependência Composer.

Registrar um evento sem vazar segredo

Os métodos Logger recebem mensagem e contexto array. Use nível por severidade e contexto mínimo para correlação; nunca inclua senha, token, Authorization ou corpo sensível. Logs de aplicação e de requisição vão para subdiretórios diários em storage/logs.

\Framework\Support\Logger::info('Cadastro concluído', ['user_id' => $userId]);
\Framework\Support\Logger::warning('Login inválido', ['email' => $email]);
\Framework\Support\Logger::setMinLevel('WARNING');

Níveis válidos de setMinLevel são DEBUG, INFO, WARNING, ERROR e CRITICAL. `Logger::request()` escreve na trilha de requisição; `log()` permite escolher o nível. No CLI, mensagens também podem aparecer no terminal.

Enviar e-mail e tratar resultado

A chamada de instância <code>$mailer-&gt;send(...)</code> devolve array com success e message; `dev` também inclui dev_body e não envia mensagem. `log` grava em storage/logs/mail.log; `smtp` requer PHPMailer e usa config/mail.php.

$result = (new \App\Support\Helpers\Mailer())->send(
    to: $email,
    subject: 'Redefinição de senha',
    body: '<p>Olá, ' . e($name) . '</p>',
    altBody: 'Olá, ' . $name,
    toName: $name
);

if (!$result['success']) {
    \Framework\Support\Logger::error('Falha no envio de e-mail', ['to' => $email]);
}
O driver dev retorna o HTML em `dev_body`, não gera URL de preview. A aplicação inclui Mailer em fluxo de reset de senha; não há motor de templates próprio. Escape conteúdo dinâmico inserido no corpo HTML.

Retornos e destinos

Logger::log() envia para arquivo e também imprime no terminal quando php_sapi_name() === 'cli'; isso não depende de APP_ENV. Logger::request() registra a requisição em arquivo e não imprime a mesma trilha no terminal. Os níveis e constantes são DEBUG/INFO/WARNING/ERROR/CRITICAL; o filtro de nível mínimo é configurado no Logger.

$mailer->send($to, $subject, $body, $altBody = '', $toName = '') retorna array com success e message; driver dev inclui dev_body. Driver log grava o corpo no log e smtp usa PHPMailer; altBody/toName não são aplicados pelos drivers log/dev. Config inexistente pode fazer o construtor falhar. Não há rota de preview para o corpo.

MAIL_DRIVER e confirmação de envio

Valores de driver tratados pelo Mailer são smtp, log e dev; o default é dev. Valor desconhecido cai silenciosamente no fluxo de simulação dev, não em envio SMTP. Valide a configuração no deploy; caso contrário, um typo pode fazer o sistema deixar de enviar sem falhar claramente.

log é uma simulação que grava o corpo completo em mail.log; dev pode devolver o corpo em dev_body. O driver log ignora falhas de mkdir/file_put_contents e ainda retorna success=true. Logo, sucesso significa que o fluxo de simulação retornou, não que houve entrega ou persistência confirmada. Verifique permissões e disco.

Dados sensíveis: corpos podem conter token e link de redefinição de senha. Não use log/dev em produção para esse conteúdo sem retenção e acesso controlados; não exponha dev_body ao cliente, e trate mail.log como dado sensível.

Destinos do Logger

Log de aplicação/erros: storage/logs/erros_aplicacao/app-YYYY-MM-DD.log. Log de requisições: storage/logs/requisicao/requests-YYYY-MM-DD.log. O nível mínimo inicial é DEBUG; nível desconhecido não altera o filtro atual e é encaminhado a error_log(). O canal request não é gravado no terminal.