2013-02-12 32 views
0

我有以下代碼段我努力從貝寶交易寫入MySQL數據庫。我只包含了相關的Zend DB日誌部分,根據數據輸出,Paypal界面工作正常。Zend Framework 2日誌記錄到MySQL數據庫額外的列插入null

$paypalLog = array(
'transactionId' => 'transactionId', 
'transactionType' => 'transactionType', 
'paymentType' => 'paymentType', 
'orderTime' => 'orderTime', 
'amt' => 'amt', 
'currencyCode' => 'currencyCode', 
'feeAmt' => 'feeAmt', 
'taxAmt' => 'taxAmt', 
'paymentStatus' => 'paymentStatus', 
'pendingReason' => 'pendingReason', 
'reasonCode' => 'reasonCode' 
);  

$data = array(
     'transactionId' => $transactionId, 
     'transactionType' => $transactionType, 
     'paymentType' => $paymentType, 
     'orderTime' => $orderTime, 
     'amt' => $amt, 
     'currencyCode' => $currencyCode, 
     'feeAmt' => $feeAmt, 
     'taxAmt' => $taxAmt, 
     'paymentStatus' => $paymentStatus, 
     'pendingReason' => $pendingReason, 
     'reasonCode' => $reasonCode 
     ); 

    $mapping = array(
     'message' => 'message', 
     'extra' => $data); 

    print_r($mapping); 

    $writer = new Zend\Log\Writer\Db($db, 'paypal', $paypalLog); 
    $logger = new Zend\Log\Logger(); 
    $logger->addWriter($writer); 
    $logger->info($mapping); 

當我運行我的代碼打印返回下面這樣的數據是可用的

Array ([message] => message [extra] => Array ([transactionId] => 03V084280U905161H [transactionType] => expresscheckout [paymentType] => instant [orderTime] => 2013-02-12T01:16:40Z [amt] => 9.00 [currencyCode] => AUD [feeAmt] => 0.52 [taxAmt] => 0.00 [paymentStatus] => Completed [pendingReason] => None [reasonCode] => None)) 

我的表被定義爲以下內容,我已經授予完全權限的用戶。

CREATE TABLE `paypal` (
    `timestamp` varchar(45) DEFAULT NULL, 
    `priority` varchar(45) DEFAULT NULL, 
    `priorityName` varchar(45) DEFAULT NULL, 
    `message` varchar(45) DEFAULT NULL, 
    `transactionId` varchar(45) NOT NULL, 
    `transactionType` varchar(45) DEFAULT NULL, 
    `paymentType` varchar(45) DEFAULT NULL, 
    `orderTime` datetime DEFAULT NULL, 
    `amt` varchar(45) DEFAULT NULL, 
    `currencyCode` varchar(45) DEFAULT NULL, 
    `feeAmt` varchar(45) DEFAULT NULL, 
    `taxAmt` varchar(45) DEFAULT NULL, 
    `paymentStatus` varchar(45) DEFAULT NULL, 
    `pendingReason` varchar(45) DEFAULT NULL, 
    `reasonCode` varchar(45) DEFAULT NULL, 
    PRIMARY KEY (`transactionId`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1$$ 

但是,當我在MySQL的一端運行跟蹤時,它只是試圖插入空值。

130212 12:19:38 29 Connect [email protected] on database 
     29 Query INSERT INTO `paypal`() VALUES() 
     29 Quit 

任何想法歡迎!

回答

1

嘗試更換這行:

$logger->info($mapping); 

有:

$logger->info($mapping['message'], $mapping['extra']); 

的Zend /記錄器的信息法預計將收到兩個單獨的參數。

編輯:

以你的代碼進一步看,我看到了另一個問題。柱形圖只是一種原型。你真正想記錄的是你的數據和一些日誌消息,對嗎?

$mapping = array(
     'message' => 'message', 
     'extra' => $paypalLog);  // Not $data ! 

    $mylog = array(
     'message' => 'My log message', 
     'extra' => $data); 

然後:

$writer = new \Zend\Log\Writer\Db($db, 'paypal', $mapping); // Writer needs mapping info, not data :-) 
    $logger = new \Zend\Log\Logger(); 
    $logger->addWriter($writer); 
    $logger->info($mylog['message'], $mylog['extra']); // ...and your log record goes here, to logger instance 
+0

我認爲這是右前方的一步但仍然無法實現它的工作。如果我檢查Logger.php函數被定義爲'/ ** * @param string $ message * @param array | traversable $ extra * @return Logger */public function info($ message,$ extra = array ()) { return $ this-> log(self :: INFO,$ message,$ extra); ($ mapping ['message'],$ mapping ['extra']);''和'$ logger-> info('message',$ data);''logger->但仍然相同null插入 – LJT 2013-02-13 09:11:00

+1

看看我的編輯。現在這真的應該工作。 – cathulhu 2013-02-14 10:40:10

+0

太好了,非常感謝,讓我越過了界限,請參閱下面的答案。 – LJT 2013-02-15 07:07:56

2

由於cathulhu的輸入,非常感謝,我得到了下面

// Array of db columns 
    $paypalLog = array('transactionId' => 'transactionId', 
    'transactionType' => 'transactionType', 
    'paymentType' => 'paymentType', 
    'orderTime' => 'orderTime', 
    'amt' => 'amt', 
    'currencyCode' => 'currencyCode', 
    'feeAmt' => 'feeAmt', 
    'taxAmt' => 'taxAmt', 
    'paymentStatus' => 'paymentStatus', 
    'pendingReason' => 'pendingReason', 
    'reasonCode' => 'reasonCode' 
    ); 

    // Map data into array matching column names 
    $data = array(   
     'transactionId' => $transactionId, 
     'transactionType' => $transactionType, 
     'paymentType' => $paymentType, 
     'orderTime' => $orderTime, 
     'amt' => $amt, 
     'currencyCode' => $currencyCode, 
     'feeAmt' => $feeAmt, 
     'taxAmt' => $taxAmt, 
     'paymentStatus' => $paymentStatus, 
     'pendingReason' => $pendingReason, 
     'reasonCode' => $reasonCode 
     ); 

    // Array to construct the DB logger table structure with extra columns 
    $mapping = array( 
     'timestamp' => 'timestamp', 
     'priority' => 'priority', 
     'priorityName' => 'priorityName', 
     'message' => 'message', 
     'extra' => $paypalLog);  

    // Array to log actual data 
    $mylog = array(
     'message' => 'some msg', 
     'extra' => $data); 

    // Configure the write/logger and specify the array members to log 
    $writer = new Zend\Log\Writer\Db($db, 'paypal', $mapping); 
    $logger = new Zend\Log\Logger(); 
    $logger->addWriter($writer); 
    $logger->info($mylog['message'], $mylog['extra']); 

這項工作,我現在看到從MySQL一般日誌此輸出

Connect [email protected] on database 
     54 Query INSERT INTO `paypal` (`timestamp`,`priority`,`priorityName`,`message`,`transactionId`,`transactionType`,`paymentType`,`orderTime`,`amt`,`currencyCode`,`feeAmt`,`taxAmt`,`paymentStatus`,`pendingReason`,`reasonCode`) VALUES ('2013-02-15T07:52:52+01:00','6','INFO','My log message','88L4229675348363C','expresscheckout','instant','2013-02-15T06:52:58Z','9.00','AUD','0.52','0.00','Completed','None','None') 
     54 Quit