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

kqqjbcuj  于 2023-01-12  发布在  PHP
关注(0)|答案(7)|浏览(167)

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

igsr9ssn

igsr9ssn1#

您可以使用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,甚至可能使用更“关键”的方法,这取决于错误的类型。

zte4gxcn

zte4gxcn2#

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

uwopmtnx

uwopmtnx3#

1)事实上,看门狗是一个标准的方式来记录自己的PHP错误.
2)或者,如果您需要在调试Drupal页面时立即看到错误消息,您可能希望在FireBug控制台的相关页面上看到它们的记录/打印。有时候,当您可以看到与页面相关的即时日志时,这是非常方便的。这需要-Devel模块,FireFox的Firebug扩展,可能还需要Firephp
您可以使用dfb()函数将日志消息直接写入常规Firebug控制台。

dfb($input, $label = NULL)

如果您不想让与Drupal相关的日志消息出现在普通的Firebug控制台中,可以使用firep()函数将消息写入Drupal for Firebug日志:

firep($item, $optional_title)
ss2ws0br

ss2ws0br4#

毫无疑问,看门狗是生产系统的首选,但在调试过程中,我发现drupal_set_message函数很有用。
它将消息输出到通常显示“操作成功”类型消息的屏幕(因此,请确保在激活站点之前将其删除)。
http://api.drupal.org/api/function/drupal_set_message/6

nfg76nw0

nfg76nw05#

在drupal 7中,我们可以通过以下方法记录消息:
drupal看门狗函数,我们可以使用它来记录数据库中的消息,请确保我们已经在/admin/build/modules中启用了数据库日志记录的可选核心模块。

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

**$type:**此邮件所属的类别,示例:PHP,cron..,我们可以按类型过滤消息。
**$message:**要存储在日志中的消息,示例:'文件系统中缺少以下模块:安全_审查'
**$variables:**要在显示的消息中替换的变量数组,如果消息已翻译或无法翻译,则为NULL。要翻译消息,请不要传递动态值应使用占位符字符串在消息中添加传递变量。
**示例:**监视器('cg_volunteer','cg in form_alter % formly',数组(' % formly' =〉$form ['#id']),监视器通知,$链接= NULL);
$severity消息的严重性,日志可以根据RFC 3164按严重性筛选。可能的值为WATCHDOG_ERROR、WATCHDOG_WARNING等。有关更多示例,请参见https://api.drupal.org/api/drupal/includes!bootstrap.inc/function/watchdog/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);

//对于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);

同样对于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(),
));
ev7lccsx

ev7lccsx6#

D7的watchdog和D8的\Drupal::logger都将在watchdog表(在您的数据库中)中写入日志,并且记录了巨大的数据,您可以想象性能影响。
你可以使用error_log php函数来实现(参见PHP manual)。

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

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

dsekswqp

dsekswqp7#

// 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

相关问题