loganalyzer3.6.5的一个bug

从昨天开始搞loganalyzer,一直无法显示自己mysql中的日志。

日志表是自定义的。

+---------+---------------------+------+-----+-------------------+----------------+
| Field   | Type                | Null | Key | Default           | Extra          |
+---------+---------------------+------+-----+-------------------+----------------+
| logId   | bigint(20) unsigned | NO   | PRI | NULL              | auto_increment | 
| account | char(64)            | NO   |     |                   |                | 
| server  | int(10) unsigned    | NO   |     | 0                 |                | 
| device  | char(64)            | NO   |     |                   |                | 
| error   | blob                | YES  |     | NULL              |                | 
| uID     | int(11)             | YES  |     | 0                 |                | 
| date    | timestamp           | NO   |     | CURRENT_TIMESTAMP |                | 
+---------+---------------------+------+-----+-------------------+----------------+

自己定义datasource,field,view,dbmapping,一切都OK。但就是显示有问题。

如下图所示少了uID那一列的数据。

google了N多资料都无解。

网上也有一个相同现象的帖子,也没有找到原因:http://kb.monitorware.com/reading-custom-mysql-table-t11919.html

一气之外感觉自己debug可能能找到原因。

在classes/logstreamdb.class.php 中

修改readnext方法如下:

 if ( $content['MaxExecutionTime'] > 0 && $scriptruntime > ($content['MaxExecutionTime']-2) )
                        {
                                // This may display a warning message, so the user knows we stopped reading records because of the script timeout.
                                $content['logstream_warning'] = "false";

                                // Run optional Message Parsers now
                                if ( isset($arrProperitesOut[SYSLOG_MESSAGE]) )
                                {
                                        $retParser = $this->_logStreamConfigObj->ProcessMsgParsers($arrProperitesOut[SYSLOG_MESSAGE], $arrProperitesOut);

                                        // Check if we have to skip the message!
                                        if ( $retParser == ERROR_MSG_SKIPMESSAGE )
                                                $ret = $retParser;
                                }

                                // Set uID to the PropertiesOut! //DEBUG -> $this->_currentRecordNum;
                                echo "<br/>";
                                echo $dbmapping[$szTableType];
                                foreach($dbmapping[$szTableType] as $key => $val) {
                                   echo "|".$key."|".$val, '<br>';
                                }
                                foreach($dbmapping[$szTableType]['DBMAPPINGS'] as $key => $val) {
                                   echo "|_|".$key."|".$val, '<br>';
                                }

                                foreach($this->bufferedRecords[$this->_currentRecordNum] as $key => $val) {
                                   echo "|||".$key."|".$val,"<br/>";
                                }

                                echo "SYSLOG_UID:".SYSLOG_UID."<br/>";
                                echo "hello ". $dbmapping[$szTableType]['DBMAPPINGS']['uID']."world";
                                echo "hello ". $this->bufferedRecords[$this->_currentRecordNum]['uid']."world";
                                echo "<br/>";
                                $uID = $arrProperitesOut[SYSLOG_UID] = $this->bufferedRecords[$this->_currentRecordNum][$dbmapping[$szTableType]['DBMAPPINGS'][SYSLOG_UID]];

                                // Increment $_currentRecordNum
                                $this->_currentRecordNum++;
                        }

把debug信息输出后,才发现问题。

uID对应数据中的logId字段,但在this->bufferedRecords中的key全是小写的。你妹的,各个文档上谁也没写要注意这么一个东西。dbmapping直接修改uID改为logid小写后,日志查看bug解决了。

正常的显示:

 

 

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>