如何在drupal中记录错误消息

时间:2009-11-10 05:36:40

标签: php drupal error-logging

如何将 php 程序中生成的自己的错误消息(例如:由于无效的用户日期条目导致的错误)记录到 drupal错误日志< /强>

7 个答案:

答案 0 :(得分:46)

您可以使用watchdog function

watchdog($type, $message, $variables = array(), $severity = WATCHDOG_NOTICE, $link = NULL)

引用手册,参数为:

  • $type此邮件所属的类别。
  • $message要存储在日志中的消息。
  • $variables要显示的消息中要替换的变量数组,如果消息已被翻译或无法翻译,则为NULL。
  • $severity消息的严重性,根据RFC 3164
  • $link与消息关联的链接。

错误级别可以在watchdog_severity_levels的页面上找到。对于错误,您最有可能使用WATCHDOG_ERROR,或者甚至可能使用更“严重”的内容,具体取决于错误的类型。

答案 1 :(得分:7)

Drupal 8

// Logs a notice
\Drupal::logger('my_module')->notice($message);
// Logs an error
\Drupal::logger('my_module')->error($message);

请参阅How to Log Messages in Drupal 8上的更多示例。

答案 2 :(得分:6)

1)确实,看门狗是记录自己的PHP错误的标准方法。

2)或者,如果您需要在调试Drupal页面时立即看到错误消息,您可能希望在相关页面上看到它们的记录/打印 - 在FireBug控制台中。 当您可以看到与页面相关的即时日志时,有时这非常方便。 这需要 - Devel模块,Firebug扩展到FireFox,可能还需要Firephp

您可以使用dfb()函数将日志消息直接写入常规Firebug控制台。

dfb($input, $label = NULL)

如果要将与Drupal相关的日志消息保留在正常的Firebug控制台之外,可以使用firep()函数将消息写入Drupal for Firebug日志:

firep($item, $optional_title)

答案 3 :(得分:3)

Watchdog是生产系统无疑的方式,但在调试过程中我发现drupal_set_message函数很有用。

它将消息输出到正常显示“操作成功”类型消息的屏幕(因此请确保在使网站直播之前将其删除)。

http://api.drupal.org/api/function/drupal_set_message/6

答案 4 :(得分:2)

在drupal 7中,我们可以通过以下方法记录消息:

drupal watchdog函数我们可以用来在数据库中记录消息,确保我们在/ admin / build / modules下启用了数据库日志的可选核心模块。

watchdog($type, $message, $variables = array(), $severity = WATCHDOG_NOTICE, $link = NULL)

<强> $类型: 此消息所属的类别,示例:PHP,cron ..,我们可以按类型过滤消息。

$ message: 要存储在日志中的消息,示例:'文件系统中缺少以下模块:security_review'

$ variables: 要在显示的消息中替换的变量数组,如果消息已被翻译或无法翻译,则为NULL。 要使消息翻译,请不要在消息中传递动态值传递变量,应使用占位符字符串添加。

示例: 看门狗('cg_volunteer','cg in form_alter%formly',array('%formly'=&gt; $ form ['#id']),WATCHDOG_NOTICE,$ link = NULL);

<强> $严重性 根据RFC 3164,可以按严重性过滤消息的严重性,可能的值是WATCHDOG_ERROR,WATCHDOG_WARNING等。 有关更多示例,请参阅https://api.drupal.org/api/drupal/includes!bootstrap.inc/function/watchdog/7.x

<强> $链路: 与消息关联的链接。

示例

//用于日志通知

watchdog('my_module', $message, array());

//用于记录错误

watchdog('my_module', $message, array(), WATCHDOG_ERROR);

在drupal 8中我们使用了以下方法:

//用于记录通知。

\Drupal::logger('my_module')->notice($message);

//用于记录错误。

\Drupal::logger('my_module')->error($message);

//对于Alert,必须立即采取行动。

\Drupal::logger('my_module')->alert($message);

//对于重要消息。

\Drupal::logger('my_module')->critical($message);

//对于调试级别的消息。

\Drupal::logger('my_module')->debug($message);

//对于紧急情况,系统无法使用。

\Drupal::logger('my_module')->emergency($message);

//警告

\Drupal::logger('my_module')->warning($message);

//对于信息性消息。

\Drupal::logger('my_module')->info($message);

同样对于翻译我们不应该使用t()函数。

\Drupal::logger('my_module')->alert('Message from @module: @message.', [
'@module' => $module,
'@message' => $message,
]);

这将在运行时翻译。

示例:

\Drupal::logger('content_entity_example')->notice('@type: deleted %title.',
array(
'@type' => $this->entity->bundle(),
'%title' => $this->entity->label(),
));

答案 5 :(得分:1)

D7的watchdog和D8的\Drupal::logger都将在watchdog表中写入日志(在您的数据库中),并且记录了 HUGE数据,您可以想象性能影响。

您可以使用error_log php函数(请参见PHP manual)。

error_log("Your message", 3, "/path/to/your/log/file.log");
  

您需要具有写入日志文件(/path/to/your/log/file.log)的权限

答案 6 :(得分:0)

// 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,
]);

Source