Como registrar uma mensagem de erro em drupal
-
19-09-2019 - |
Pergunta
Como fazer o nosso próprias mensagens de erro(por ex:erro devido a um usuário inválido data de entrada), que é gerado no php programa para o drupal log de erro.
Solução
Você pode usar o watchdog
função :
watchdog($type, $message, $variables = array(), $severity = WATCHDOG_NOTICE, $link = NULL)
Citando o manual, os parâmetros são :
$type
A categoria à qual esta mensagem pertence.$message
A mensagem para armazenar em log.$variables
Matriz de variáveis para substituir a mensagem no visor ou NULL se a mensagem já está traduzido ou não possível traduzir.$severity
A gravidade da mensagem, conforme a RFC 3164$link
Um link para associar com a mensagem.
E os níveis de erro podem ser encontradas na página de watchdog_severity_levels
.Por um erro, você vai provavelmente usar WATCHDOG_ERROR
, ou talvez até mesmo algo mais "crítico", dependendo do tipo de erro.
Outras dicas
Drupal 8
// Logs a notice
\Drupal::logger('my_module')->notice($message);
// Logs an error
\Drupal::logger('my_module')->error($message);
Veja mais exemplos em Como registrar mensagens no Drupal 8.
1) De fato, o cão de guarda é uma maneira padrão de registrar erros de PHP próprios.
2) Como alternativa, se você precisar ver imediatamente as mensagens de erro ao depurar suas páginas do Drupal, convém vê -las registradas/impressas diretamente na página relacionada - no console do Firebug. Às vezes, isso é muito conveniente quando você pode ver logs justos relacionados à página. Isto exige - Devel módulo, Firebug extensão para o Firefox e possivelmente Firephp.
Você pode usar a função dfb () para gravar mensagens de log diretamente no console geral do Firebug.
dfb($input, $label = NULL)
Se você deseja manter suas mensagens de log relacionadas ao Drupal fora do console normal do Firebug, você pode escrever mensagens para o Drupal para Firebug Faça log com a função Firep ():
firep($item, $optional_title)
Watchdog é o caminho a seguir para um sistema de produção, sem dúvida, mas durante a depuração, encontro o drupal_set_message
função útil.
Ele gera a mensagem para a tela em que as mensagens 'Operação bem-sucedida' são normalmente exibidas (portanto, remova-as antes de divulgar o site).
No drupal 7 podemos mensagem de log pelo seguinte método:
o drupal função watchdog podemos usar a mensagem de log no banco de dados , certifique-se de que temos habilitado opcional módulo de núcleo para o Banco de dados de Log em /admin/build/modules.
watchdog($type, $message, $variables = array(), $severity = WATCHDOG_NOTICE, $link = NULL)
$tipo: A categoria à qual esta mensagem pertence , Exemplo:PHP,cron.., podemos mensagem de filtro por tipo.
$mensagem : A mensagem de armazenar em log,Exemplo:"O módulo seguinte está em falta a partir do ficheiro de sistema:security_review'
$variáveis : Matriz de variáveis para substituir a mensagem no visor ou NULL se a mensagem já está traduzido ou não possível traduzir.para tornar a mensagem traduzida , não passam de valor dinâmico passar variáveis da mensagem deve ser adicionado por meio de seqüências de caracteres de espaço reservado.
Exemplo: cão de guarda('cg_volunteer', 'cg em form_alter %formly', array('%formly' => $form['#id']), WATCHDOG_NOTICE, $link = NULL);
$gravidade A gravidade da mensagem,os logs podem ser de filtro por gravidade, conforme a RFC 3164.Valores possíveis são WATCHDOG_ERROR, WATCHDOG_WARNING, etc.Para mais um exemplo de veja https://api.drupal.org/api/drupal/includes!bootstrap.inc/função/watchdog/7.x
$link:Um link para associar com a mensagem.
Exemplo
// para logs de avisos
watchdog('my_module', $message, array());
// para iniciar sessão Erro
watchdog('my_module', $message, array(), WATCHDOG_ERROR);
No drupal 8 usamos o seguinte método:
// Para os Logs de um aviso prévio.
\Drupal::logger('my_module')->notice($message);
// Para Registos de um erro.
\Drupal::logger('my_module')->error($message);
// Para o Alerta, a ação deve ser tomada imediatamente.
\Drupal::logger('my_module')->alert($message);
// Para a mensagem de Crítica.
\Drupal::logger('my_module')->critical($message);
// Para mensagens de nível de Depuração.
\Drupal::logger('my_module')->debug($message);
//Para casos de Emergência, o sistema está inutilizável.
\Drupal::logger('my_module')->emergency($message);
//Para Aviso
\Drupal::logger('my_module')->warning($message);
//Para mensagens Informativas.
\Drupal::logger('my_module')->info($message);
Também para traduzir não devemos usar t() função.
\Drupal::logger('my_module')->alert('Message from @module: @message.', [
'@module' => $module,
'@message' => $message,
]);
isso será traduzido em tempo de execução.
Exemplo :
\Drupal::logger('content_entity_example')->notice('@type: deleted %title.',
array(
'@type' => $this->entity->bundle(),
'%title' => $this->entity->label(),
));
Ambos watchdog
para d7 e \Drupal::logger
Para D8, escreverá o login watchdog
tabela (em seu banco de dados) e com Dados enormes registrados, você pode imaginar o impacto do desempenho.
Você pode usar error_log
função php para fazer isso (veja Manual do PHP).
error_log("Your message", 3, "/path/to/your/log/file.log");
Você precisa ter permissão para escrever em seu arquivo de log (
/path/to/your/log/file.log
)
// Get logger factory.
$logger = \Drupal::service('logger.factory');
// Log a message with dynamic variables.
$nodeType = 'Article';
$userName = 'Admin';
$logger->get($moduleName)->notice('A new "@nodeType" created by %userName.', [
'@nodeType' => $nodeType,
'%userName' => $userName,
]);