38

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

4

7 回答 7

50

您可以使用以下watchdog功能

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

引用手册,参数为:

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

错误级别可以在 的页面上找到watchdog_severity_levels。对于错误,您很可能会使用WATCHDOG_ERROR,或者甚至可能使用更“关键”的东西,具体取决于错误的类型。

于 2009-11-10T05:45:15.187 回答
10

Drupal 8

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

请参阅如何在 Drupal 8 中记录消息的更多示例。

于 2016-03-21T17:02:45.463 回答
6

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

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

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

dfb($input, $label = NULL)

如果您想将 Drupal 相关的日志消息排除在普通 Firebug 控制台之外,您可以使用 firep() 函数将消息写入Drupal for Firebug日志:

firep($item, $optional_title)
于 2009-11-10T08:14:18.703 回答
5

看门狗无疑是生产系统的方式,但在调试过程中我发现该drupal_set_message功能很有用。

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

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

于 2009-11-10T08:54:17.403 回答
2

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

您可以使用error_logphp 函数来执行此操作(请参阅PHP 手册)。

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

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

于 2018-07-19T10:45:33.433 回答
2

在 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_volunteer', 'cg in form_alter %formly', array('%formly' => $form['#id']), WATCHDOG_NOTICE, $link = NULL);

$severity 消息的严重性,日志可以根据 RFC 3164 按严重性过滤。可能的值是 WATCHDOG_ERROR、WATCHDOG_WARNING 等。更多示例参见https://api.drupal.org/api/drupal/includes!bootstrap。公司/功能/看门狗/7.x

$link:与消息关联的链接。

例子

// 用于日志通知

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);

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

\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(),
));
于 2018-04-05T10:45:36.700 回答
1
// 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,
]);

资源

于 2018-10-03T09:59:29.080 回答