如何遍历Drupal的看门狗table?

How to traverse the Drupal's watchdog table?

我想从看门狗 table 获取所有错误消息,但是当我从 table 获取消息列时,它有 %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 吗?我该怎么做?

这应该可以帮助您入门

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 从看门狗 table:

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

看下面的代码:

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