Php 如何在drupal中记录错误消息

Php 如何在drupal中记录错误消息,php,drupal,error-logging,drupal-8,log,Php,Drupal,Error Logging,Drupal 8,Log,如何将php程序中生成的我们自己的错误消息记录到drupal错误日志中(例如:由于无效的用户日期输入而导致的错误),您可以使用: 引用本手册,参数如下: $type此邮件所属的类别 $message要存储在日志中的消息 $variables要在显示的消息中替换的变量数组,如果消息已翻译或无法翻译,则为NULL $severity根据RFC 3164,消息的严重性 $link与消息关联的链接 错误级别可在的页上找到。对于错误,您很可能会使用WATCHDOG\u error,甚至可能使用更“关键

如何将php程序中生成的我们自己的错误消息记录到drupal错误日志中(例如:由于无效的用户日期输入而导致的错误),您可以使用:

引用本手册,参数如下:

  • $type
    此邮件所属的类别
  • $message
    要存储在日志中的消息
  • $variables
    要在显示的消息中替换的变量数组,如果消息已翻译或无法翻译,则为NULL
  • $severity
    根据RFC 3164,消息的严重性
  • $link
    与消息关联的链接
错误级别可在的页上找到。对于错误,您很可能会使用
WATCHDOG\u error
,甚至可能使用更“关键”的方法,具体取决于错误的类型。

1)事实上,WATCHDOG是记录自己的PHP错误的标准方法

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

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

dfb($input, $label = NULL)
如果要将Drupal相关日志消息保留在正常Firebug控制台之外,可以使用firep()函数将消息写入日志:

firep($item, $optional_title)

Watchdog无疑是生产系统的一种方式,但在调试期间,我发现
drupal\u set\u message
函数很有用

它将消息输出到屏幕,屏幕上通常会显示“操作成功”类型的消息(因此,请确保在激活站点之前将其删除)

Drupal 8

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

请参阅更多示例。

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

drupal的看门狗功能,我们可以使用它来记录数据库中的消息,确保我们已经在/admin/build/modules中为数据库记录启用了可选的核心模块

watchdog($type, $message, $variables = array(), $severity = WATCHDOG_NOTICE, $link = NULL)
$type: 此消息所属的类别,例如:PHP、cron..,我们可以按类型筛选消息

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

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

示例: watchdog('cg#u志愿者','cg in form_alter%formly',数组('%formly'=>$form[''id']),watchdog#u通知,$link=NULL)

$severity 消息、日志的严重性可根据RFC 3164的严重性进行过滤。可能的值包括看门狗错误、看门狗警告等。 有关更多示例,请参见

$link: 与消息关联的链接

示例

//日志通知

watchdog('my_module', $message, array());
//对于登录错误

watchdog('my_module', $message, array(), WATCHDOG_ERROR);
在drupal 8中,我们使用了以下方法:

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

\Drupal::logger('my_module')->notice($message);
//对于日志,将显示一个错误

\Drupal::logger('my_module')->error($message);
//对于警报,必须立即采取行动

\Drupal::logger('my_module')->alert($message);
//对于关键信息

\Drupal::logger('my_module')->critical($message);
//用于调试级消息

\Drupal::logger('my_module')->debug($message);
\Drupal::logger('my_module')->info($message);
//紧急情况下,系统不可用

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

\Drupal::logger('my_module')->warning($message);
//获取信息性消息

\Drupal::logger('my_module')->debug($message);
\Drupal::logger('my_module')->info($message);
同样对于translate,我们不应该使用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(),
));

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

您可以使用
error\u log
php函数执行此操作(请参阅)

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


刚刚安装了Drupal for Firebug扩展-非常好。
$type
通常是您正在开发的模块的名称。我正在尝试记录整个“$form”,例如,您可以使用
$message='My form:'将其记录为老式。打印($form,TRUE)。”milkovsky的评论中缺少“
$message=”我的表单:”。打印($form,TRUE)。“”如何添加链接?谢谢,我正在寻找如何使用参数添加链接。