如何遍历Drupal的监视表?

时间:2015-03-05 09:13:51

标签: php drupal foreach drupal-7 watchdog

我想从监视程序表中获取所有错误消息,但是当我从表中获取消息列时,它具有%path,%function,!message类似于此消息的消息我如何能够获取整个真实消息这个信号?

<?php
  // Begin building the query.
  $query = db_select('watchdog', 'th')
    ->extend('PagerDefault')
    ->orderBy('wid')
    ->distinct()
    ->fields('th', array('variables', 'type', 'severity', 'message'))
    ->limit(2000);


  // Fetch the result set.
  $result = $query  -> execute();


  // Loop through each item and add to $row
  foreach ($result as $row) {
    blablabla($row);
  }

function blablabla($row) {   
  $severity = $row -> severity;
  $type = $row -> type;
  $message = $row -> message;
?>

当我使用$message时,它会显示如下内容:

%type: !message in %function (line %line of %file)...

保持%path

%type: !message in %function (line %line of %file)...

开始列出%directory中的文件。

我怎么能纠正这件事?我可以使用错误API以及如何操作吗?

2 个答案:

答案 0 :(得分:2)

这应该让你入门

blablabla($row) {
    $variables = unserialize($row->variables); // un serialize variables
    $message = t($row->message, array(
        'type'    => $row->type,
        'severity'=> $row->severity,
        // replace the rest of the variables
    ));

另外,检查这些。这就是drupal从看门狗表中读取的方式:

  • dblog_overview;这是呈现此页面的功能admin/reports/dblog
  • dblog_event;这是在此页面admin/reports/event/ID内显示单个dblog条目的函数。

答案 1 :(得分:2)

请看下面的代码:

if (isset($row->message) && isset($row->variables)){
        if ($row->variables === 'N;')
          $dbmessage = $row->message;
        else $dbmessage = t($row->message, unserialize($row->variables));
          $dbmessage = filter_xss($dbmessage, array());
     }