我要保存日誌條目從Zend框架2.我的MySQL數據庫,我使用的Zend\Log\Logger
有Zend\Log\Writer\Db
作家。通過爲作者提供一個數組,可以選擇將哪些數據保存到哪些列(例如,時間戳記到「log_date」列)以及要保存哪些數據。下面是我在做什麼:數據庫日誌記錄在Zend框架2:錯誤的「額外」列名
$logger = new Zend\Log\Logger();
$mapping = array(
'timestamp' => 'timestamp_column',
'priority' => 'priority_column',
'message' => 'message_column',
'extra' => 'extra_column'
);
$logger->addWriter(new Zend\Log\Writer\Db($dbAdapter, 'table_name', $mapping));
$logger->err('some message', array('some extra information'));
我現在面臨的問題是,列名和它們的值的數組包含「額外」列中的不正確的列名。根據上面的數組,它應該將值「一些額外的信息」插入到「extra_column」列中。問題是Zend\Log\Writer\Db
類正在使用字母「e」作爲額外列的名稱。這來自我上面的數組中的「extra_column」的第一個字母。出於某種原因,它將第一個字母「extra_column」作爲列名使用,而不是整個值。
我看了一下源代碼。正在使用mapEventIntoColumn
方法將列名和值作爲數組獲取。我複製了下面方法的相關部分。
// Example:
// $event = array('extra' => array(0 => 'some extra information'));
// $columnMap = array('extra' => 'extra_column');
// Return: array('e' => 'some extra information')
// Expected (without looking at the code below): array('extra_column' => 'some extra information')
protected function mapEventIntoColumn(array $event, array $columnMap = null) {
$data = array();
foreach ($event as $name => $value) {
if (is_array($value)) {
foreach ($value as $key => $subvalue) {
if (isset($columnMap[$name][$key])) {
$data[$columnMap[$name][$key]] = $subvalue;
}
}
}
}
return $data;
}
的$event
參數是包含用於日誌消息相同的鍵作爲我在我的第一個代碼段$mapping
陣列和所述值的數組。 $columnMap
參數是我的第一個代碼片段中的$mapping
數組(數組值是列名)。
什麼實際上似乎發生的是,因爲我額外的信息傳遞作爲數組(這是必需的),則執行內部foreach循環。這裏,$key
是0(索引),所以它實際上是這樣做的:$columnMap['extra'][0]
。這給出了字母「e」(「extra_column」中的第一個字母),它用作列名,它應該是整個列名。
我試圖調用日誌方法時提供自己的鑰匙額外的陣中,但同樣的情況。官方文檔沒有顯示使用額外參數的例子。我想插入可以幫助我將錯誤調試到我的表中的信息,所以我想使用它。
這是一個錯誤還是我錯過了什麼?對我來說這似乎很奇怪!我希望我解釋得很好 - 這非常棘手!
在我看來,它要求您指定額外的信息作爲名稱值映射,例如, '''somethingElseIWantToKnow'=>'太陽閃耀']'。因此,您必須將映射設置爲'['timestamp'=> ...,'extra'=> ['somethingElseIWantToKnow'=>'whats_the_weather']]]'。但是,尚未使用數據庫編寫器,我只能通過查看源代碼來猜測。 –
@DanielM謝謝!原來是這個問題。我應該已經知道了,但它有助於獲得另一雙眼睛。 :-)如果您將您的評論複製到答案中,我會接受它。再次感謝。 – Andy0708