题
如何记录我们的 自己的错误消息(例如:由于无效的用户日期输入而产生的错误) php 编程到 drupal错误日志.
解决方案
您可以使用 watchdog
功能 :
watchdog($type, $message, $variables = array(), $severity = WATCHDOG_NOTICE, $link = NULL)
引用手册,参数为:
$type
该消息所属的类别。$message
要存储在日志中的消息。$variables
要在显示的消息中替换的变量数组,如果消息已翻译或无法翻译,则为 NULL。$severity
消息的严重性,根据 RFC 3164$link
与消息关联的链接。
错误级别可以在页面上找到 watchdog_severity_levels
. 。对于错误,您很可能会使用 WATCHDOG_ERROR
, ,或者甚至可能是更“关键”的东西,具体取决于错误的类型。
其他提示
的Drupal 8
// Logs a notice
\Drupal::logger('my_module')->notice($message);
// Logs an error
\Drupal::logger('my_module')->error($message);
请参阅更多的例子在如何登录在Drupal 8 消息
1)确实,看门狗是记录自己的PHP错误的标准方法。
2) 或者,如果您在调试 Drupal 页面时需要立即查看错误消息,您可能希望在相关页面上直接查看它们记录/打印 - 在 FireBug 控制台中。有时,当您可以看到与页面相关的即时日志时,这非常方便。这需要—— 德维尔 模块, 萤火虫 扩展至 FireFox 并可能 火力PHP.
您可以使用 dfb() 函数将日志消息直接写入通用 Firebug 控制台。
dfb($input, $label = NULL)
如果您想让 Drupal 相关的日志消息远离正常的 Firebug 控制台,您可以将消息写入 用于 Firebug 的 Drupal 使用 firep() 函数记录:
firep($item, $optional_title)
看门狗是去生产系统毫无疑问的方式,但在调试过程中我发现drupal_set_message
功能非常有用。
它输出消息到“操作Successful'型消息通常显示在屏幕(以便确保您使网站实时之前删除它们)。
在的Drupal 7我们可以记录由以下方法信息:
Drupal的看门狗功能,我们可以在数据库中记录的消息,确保我们启用了数据库日志可选核心模块在/管理/建设/模块。
watchdog($type, $message, $variables = array(), $severity = WATCHDOG_NOTICE, $link = NULL)
<强> $类型:强> 该消息所属的类别,例如:PHP,cron的..,我们可以通过类型来过滤消息
<强> $消息:强> 该消息存储日志,实施例中:“下面的模块从文件系统丢失:security_review”
<强> $变量:强> 变量数组的消息中替换上显示或NULL,如果消息已经被转变或不可能的平移。 使消息被翻译,不传递动态值传递变量的消息中应通过使用占位符字符串被添加。
示例:强> 看门狗( 'cg_volunteer', 'CG在form_alter%formly',阵列( '%formly'=> $形式[ '#标识']),WATCHDOG_NOTICE,$链接= 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);
//对于异动,动作必须立即采取。
\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(),
));
这两个watchdog
为D7及\Drupal::logger
为D8将写日志中watchdog
表(数据库),并用庞大的数据记录上,你能想象的性能影响。
可以使用error_log
PHP函数做(见 PHP手册一>)。
error_log("Your message", 3, "/path/to/your/log/file.log");
您需要有权限在日志文件中写入(
/path/to/your/log/file.log
)
Drupal的8 <一类= “标签后的” href = “/问题/标记/ drupal的” 标题= “节目问题标记 '的Drupal'” 的rel = “标签”> drupal的 <类= “标签后的” href = “/问题/标记/ PHP的” 标题= “节目问题标记的PHP'” 的rel = “标签”> PHP <类= “标签后的” href = “/问题/标记/记录” 标题= “显示问题标记 '登录'” 的rel = “标签”>登录
// 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,
]);